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

請問關於圖片的部分複製

尚未結案
xdio2
一般會員


發表:60
回覆:29
積分:17
註冊:2004-07-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-28 15:34:21 IP:61.59.xxx.xxx 未訂閱
請問各位大大 小弟今天想複製在Image1圖部分區域到Image2去 可是複製過後,再Image2中不屬於複製圖片的區域都變成白色了 (1) 請問若是我不希望Image2未被利用的地方變成白色 而是空的狀況.... 要怎麼做呢? (2) 再另外請問一下 要是我想複製一塊以上的區域 得怎麼做呢? Image2->Canvas->CopyRect(rect1,Bmp->Canvas,rect2); 若是我之後再接著 Image2->Canvas->CopyRect(rect3,Bmp->Canvas,rect4); 把rect3跟rect4都設定新的值 結果卻還是只會做第一個 Image2->Canvas->CopyRect(rect1,Bmp->Canvas,rect2); 該怎麼解決呢? 請大大為我解惑一下 感謝~ 下面是小弟原本的程式碼
Graphics::TBitmap *Bmp = new Graphics::TBitmap();
Bmp->Assign(Image1->Picture->Bitmap);    TRect rect1,rect2;    rect1=Rect(0,138,450,30);
rect2=Rect(0,138,450,30);
Image2->Canvas->CopyRect(rect1,Bmp->Canvas,rect2);      
發表人 - xdio2 於 2004/10/28 15:41:09
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-28 16:23:55 IP:220.135.xxx.xxx 未訂閱
你好:    試試這樣的寫法,看結果對不對。
   Graphics::TBitmap *Bmp = new Graphics::TBitmap();
   Graphics::TBitmap *Bmp1 = new Graphics::TBitmap();
   Bmp->Assign(Image1->Picture->Bitmap);       TRect rect1,rect2;       rect1=Rect(20,20,100,100);       rect2=Rect(100,100,120,120);
   Bmp1->Transparent = true;       Bmp1->Transparent = true;
   Image2->Transparent = true;       Bmp1->Width   = Image1->Width;
   Bmp1->Height  = Image1->Width;
   Image2->Width   = Image1->Width;
   Image2->Height  = Image1->Height;       Bmp1->Canvas->CopyRect(rect1,Bmp->Canvas,rect1);
   Bmp1->Canvas->CopyRect(rect2,Bmp->Canvas,rect2);       Image2->Picture->Assign(Bmp1);
xdio2
一般會員


發表:60
回覆:29
積分:17
註冊:2004-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-28 19:05:02 IP:61.59.xxx.xxx 未訂閱
引言: 你好: 試試這樣的寫法,看結果對不對。
   Graphics::TBitmap *Bmp = new Graphics::TBitmap();
   Graphics::TBitmap *Bmp1 = new Graphics::TBitmap();
   Bmp->Assign(Image1->Picture->Bitmap);       TRect rect1,rect2;       rect1=Rect(20,20,100,100);       rect2=Rect(100,100,120,120);
   Bmp1->Transparent = true;       Bmp1->Transparent = true;
   Image2->Transparent = true;       Bmp1->Width   = Image1->Width;
   Bmp1->Height  = Image1->Width;
   Image2->Width   = Image1->Width;
   Image2->Height  = Image1->Height;       Bmp1->Canvas->CopyRect(rect1,Bmp->Canvas,rect1);
   Bmp1->Canvas->CopyRect(rect2,Bmp->Canvas,rect2);       Image2->Picture->Assign(Bmp1);
你好喔! 謝謝您的回覆 (1) 確實可以辦到複製兩塊區域, 可是似乎底色還是會變成白色的哩.... (2) 再另外請問您,把 Transparent改成true屬性 是說把透明打開嗎? 可是似乎沒有出現效果 請問透明打開後圖會變成怎樣嗎? 勞煩您為小弟解惑一下兩個問題 謝謝
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-29 11:17:05 IP:220.135.xxx.xxx 未訂閱
你好:    我在下面的程式中加上透明的設定,因為在我的電腦都有成功,沒有白色的部分 你再試試看。    
   Graphics::TBitmap *Bmp = new Graphics::TBitmap();
   Graphics::TBitmap *Bmp1 = new Graphics::TBitmap();
   Bmp->Assign(Image1->Picture->Bitmap);       TRect rect1,rect2;       rect1=Rect(20,20,100,100);       rect2=Rect(100,100,120,120);
   Bmp1->Transparent = true;      // 啟動透明的功能
   Bmp1->Transparent = true;   
   // 設定透明的顏色,初始是整張白色,所以任取一點(1,1)
   Bmp1->TransparentColor = Bmp1->Canvas->Pixels[1][1];
   // 修正模式
   Bmp1->TransparentMode = tmAuto;       Image2->Transparent = true;       Bmp1->Width   = Image1->Width;
   Bmp1->Height  = Image1->Width;
   Image2->Width   = Image1->Width;
   Image2->Height  = Image1->Height;       Bmp1->Canvas->CopyRect(rect1,Bmp->Canvas,rect1);
   Bmp1->Canvas->CopyRect(rect2,Bmp->Canvas,rect2);       Image2->Picture->Assign(Bmp1);
xdio2
一般會員


發表:60
回覆:29
積分:17
註冊:2004-07-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-29 19:47:52 IP:218.166.xxx.xxx 未訂閱
感謝你的熱心回覆喔 小弟對BCB還是不太熟 想再請問您幾個問題....     Bmp1->Transparent = true; // 啟動透明的功能 Bmp1->Transparent = true; 這邊您寫了兩次....這是筆誤嗎? // 設定透明的顏色,初始是整張白色,所以任取一點(1,1) Bmp1->TransparentColor = Bmp1->Canvas->Pixels[1][1]; 請問您把透明顏色指定成(1,1)這點的顏色 是爲了....?? // 修正模式 Bmp1->TransparentMode = tmAuto; 這邊是說你把透明顏色的模式變成Auto嗎? 用意是?? 以上幾個問題 勞煩您了 感謝
JerryKuo
版主


發表:42
回覆:571
積分:322
註冊:2003-03-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-01 09:47:17 IP:220.135.xxx.xxx 未訂閱
引言: Bmp1->Transparent = true; // 啟動透明的功能 Bmp1->Transparent = true; 這邊您寫了兩次....這是筆誤嗎? 是筆誤,做一次就可以了。 // 設定透明的顏色,初始是整張白色,所以任取一點(1,1) Bmp1->TransparentColor = Bmp1->Canvas->Pixels[1][1]; 請問您把透明顏色指定成(1,1)這點的顏色 是爲了....?? 因為單純設定Transparent還不能百分之百的透明,還是會出現白底 所以在還沒讀入圖片前,先指定(1,1)這個點的顏色都設為透明底色, 這樣底色才會真正透明。 不過,這樣的作法還是會有副作用,原因是如果讀入的圖片也有和 (1,1)的顏色一樣時,這點也會被設為透明,顏色就和原來的不一樣。 // 修正模式 Bmp1->TransparentMode = tmAuto; 這邊是說你把透明顏色的模式變成Auto嗎? 用意是?? 抱歉,這個command好像有點多餘,原因為是有設定TransparentColor 應該就不用再設定TransparentMode,至於用意我也看不大懂,應該是指定 TransparentColor的方法是否為自動或手動。你可以查一下F1
When TransparentMode is set to tmAuto (the default), the 
TransparentColor property returns the color of the bottom-
leftmost pixel of the bitmap image.  When TransparentMode is set 
to tmFixed, the TransparentColor property refers to the color 
stored in the bitmap object.
xdio2
一般會員


發表:60
回覆:29
積分:17
註冊:2004-07-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-01 23:46:58 IP:61.59.xxx.xxx 未訂閱
多謝你了 總算ok啦 Bmp1->TransparentMode = tmAuto; 重點好像是這條 得加上去才會變成透明的 再次感謝你囉 謝謝~
系統時間:2024-07-01 5:41:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!