線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2664
推到 Plurk!
推到 Facebook!

如何合併兩張圖,第二張白色變為透明??

尚未結案
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-06 15:36:41 IP:61.218.xxx.xxx 未訂閱
請教各位前輩    如何合併兩張圖,第二張白色變為透明??    如下圖一當底圖,圖二的圓要加到圖一中 白色部份要變成空白, 請教各位前輩要如何處理較快?? 感謝....... 發表人 - jeffreck 於 2005/01/06 15:42:12
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-06 16:05:59 IP:202.39.xxx.xxx 未訂閱
試試這個做法:
procedure DrawTransparent(DestCanvas: TCanvas; X,Y: smallint;
  SrcBitmap: TBitmap; AColor: TColor);
var
  ANDBitmap, ORBitmap: TBitmap;
  CM: TCopyMode;
  Src: TRect;
begin
  ANDBitmap:= NIL;
  ORBitmap:=  NIL;
  try
    ANDBitmap:= TBitmap.Create;
    ORBitmap:= TBitmap.Create;
    Src  := Bounds(0,0, SrcBitmap.Width, SrcBitmap.Height);
    with ORBitmap do
    begin
      Width:= SrcBitmap.Width;
      Height:= SrcBitmap.Height;
      Canvas.Brush.Color := clBlack;
      Canvas.CopyMode := cmSrcCopy;
      Canvas.BrushCopy(Src, SrcBitmap, Src, AColor);
    end;
    with ANDBitmap do
    begin
      Width:= SrcBitmap.Width;
      Height:= SrcBitmap.Height;
      Canvas.Brush.Color := clWhite;
      Canvas.CopyMode := cmSrcInvert;
      Canvas.BrushCopy(Src, SrcBitmap, Src, AColor);
    end;
    with DestCanvas do
    begin
      CM := CopyMode;
      CopyMode := cmSrcAnd;
      Draw(X,Y, ANDBitmap);
      CopyMode := cmSrcPaint;
      Draw(X,Y, ORBitmap);
      CopyMode := CM;
    end;
  finally
    ANDBitmap.Free;
    ORBitmap.Free;
  end;
end;
資料來源: http://groups.google.com/groups?hl=zh-TW&lr=&th=199a6b1977db1977&rnum=10 -- QBQ: 我能做什麼?
TheMoon
中階會員


發表:17
回覆:95
積分:67
註冊:2002-06-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-07 14:33:46 IP:202.39.xxx.xxx 未訂閱
附一段code請參考, 您可以去Help查CopyMode, 用不同的CopyMode可做到不同的效果。 Good Luck  < class="code"> var A, B: TBitmap; begin A:= NIL; B:= NIL; try A:= TBitmap.Create; B:= TBitmap.Create; A.LoadFromFile('A.bmp'); //上圖 B.LoadFromFile('B.bmp'); //下圖 A.Canvas.CopyMode:= cmSrcAnd; A.Canvas.Draw(0,0,B); Image1.Picture.Assign(A); finally A.Free; B.Free; end;
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-07 19:24:10 IP:61.218.xxx.xxx 未訂閱
真是太神了     謝謝兩位前, 想不到還提位兩種方法,真是感謝    因我的程式會多次處理圖型所以效率很重要 所以作了以下測試,一次處理100圖型合併,取得三次結果如下!!    方案一 hagar  100 次 30,12,19 秒    方案二 TheMoon  100 次 1,3,1 秒    謝謝各位前輩 ,再試試 CopyMode 能不能作的要的另一功能
系統時間:2024-07-02 12:26:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!