全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:876
推到 Plurk!
推到 Facebook!

影像回復 重做問題

尚未結案
阿倫
一般會員


發表:2
回覆:5
積分:1
註冊:2004-12-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-03 20:32:51 IP:59.104.xxx.xxx 未訂閱
小弟想請教各位大大..我做了MDI的影像處理小程式 可是想做[回覆]和[重做]功能...可是無從下手 請哪位大大指點指點..^^
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-03 22:33:12 IP:140.113.xxx.xxx 未訂閱
dear 阿倫: 提供一個作法給你參考看看~~回覆(Undo)的部份,替每一個影像建立一塊記憶體,再每次進行處理之前把影像複製一份進去。當使用者做Undo時,就把記憶體中的影像複製回來即可。因為你是用MDI的方式,所以每個影像都要準備自己的Undo區塊,不能共用。 重做(Redo)的話,我想到兩種作法。一是類似Undo的作法;二是把上一個執行的指令記下來,當使用者執行Redo時,執行該指令。不過第二種作法的困難在於如何執行記下來的指令。我的作法可能會利用TList與TAction來搭配,或是用函數指標的方式也可以。 另外,如果要作多次Undo與Redo功能(類似Word那樣),或許考慮用堆疊的方式管理Undo/Redo的記憶體吧~
阿倫
一般會員


發表:2
回覆:5
積分:1
註冊:2004-12-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-04 03:31:50 IP:59.104.xxx.xxx 未訂閱
Dear~arisaka_matsuri @_@ 其實第一種方法是有想到...可是不知道怎嚜做...想說因該是用TMemory (==不會用) 不過還想看看有沒有其他更好的方法 麻煩大大賜教^^
阿倫
一般會員


發表:2
回覆:5
積分:1
註冊:2004-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-04 05:12:35 IP:59.104.xxx.xxx 未訂閱
dear arisaka_matsuri 剛剛是了依下 Graphics::TBitmap *track = new Graphics::TBitmap();    track->Assign(form2[select]->Image1->Picture->Bitmap);     form2[select]->Image1->Picture->Assign(track); 是做出來了 可是這樣的話我只可以坐一次的動作 如何宣告成正烈ㄋ...@@  請大大賜教...
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-04 13:15:41 IP:140.113.xxx.xxx 未訂閱
dear 阿倫:    你可以用
  // 產生動態指標陣列
  Graphics::TBitmap **pBMP = new Graphics::TBitmap *[16];
  
  // 產生TBitmap物件
  for(int i = 0; i < 16; i  )
    pBMP[i] = new Graphics::TBitmap();
來產生足夠的TBitmap物件存放你的影像。
阿倫
一般會員


發表:2
回覆:5
積分:1
註冊:2004-12-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-01-05 01:35:31 IP:59.104.xxx.xxx 未訂閱
hi arisaka_matsuri 謝謝大大 不過小弟想宣告成二為鄭烈卻錯了 Graphics::TBitmap **track = new Graphics::TBitmap *[10][10];    [C++ Error] Unit1.cpp(17): E2034 Cannot convert 'TBitmap * ( *)[10]' to 'TBitmap * *' 那要怎樣宣告ㄋ.... 請大大賜教
arisaka_matsuri
高階會員


發表:25
回覆:205
積分:231
註冊:2003-10-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-01-05 17:38:35 IP:140.113.xxx.xxx 未訂閱
dear 阿倫:    由於VCL類別物件只能用 new 來產生,所以會比較麻煩一點。
  // 產生動態二維TBitmap陣列
  // 宣告一個三重指標,指向包含8個二重指標的記憶體
  Graphics::TBitmap ***pBMP = new Graphics::TBitmap **[8];      for(int i = 0; i < 8; i  )
  {
    // 對每一個二重指標,指向包含16個指標的記憶體
    pBMP[i] = new Graphics::TBitmap *[16];        // 讓每個指標指向新產生TBitmap物件
    for(int j = 0; j < 16; j  )
      // pBMP[i][j] 是一個指向TBitmap的指標
      pBMP[i][j] = new Graphics::TBitmap();
  }
這樣就會產生 8*16 的TBitmap物件陣列,透過指標pBMP[i][j]來操作。
阿倫
一般會員


發表:2
回覆:5
積分:1
註冊:2004-12-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-01-06 02:29:33 IP:59.104.xxx.xxx 未訂閱
dear arisaka_matsuri 太感謝大大了... 都搞定拉...
系統時間:2024-05-04 5:02:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!