2013-09-22 75 views
5

是否可以通過將相同大小的兩個或多個不同bmp圖片合併爲一個圖片?與在Windows XP MS Paint中完成的方法相同:將另一張圖片粘貼到另一張圖片中,並且輔助顏色是透明的。在一個圖像中疊加圖片

Example

+5

當然可能。自己完成[很多](http://english.rejbrand.se/algosim/manual/pmproc/pmproc.html)。 –

+1

@AndreasRejbrand:感謝那個鏈接,更具體的內容。偉大的參考。 –

回答

9

您可以使用TBitmapTransparent屬性這種效果。由於您的位圖具有黑色邊框,因此自動透明顏色(圖像數據的第一個像素)不起作用,您還需要將TransparentColor屬性設置爲'clWhite'。

var 
    bmp1, bmp2: TBitmap; 
begin 
    bmp1 := TBitmap.Create; 
    bmp1.LoadFromFile('...\test1.bmp'); 

    bmp2 := TBitmap.Create; 
    bmp2.LoadFromFile('...\test2.bmp'); 

// bmp2.PixelFormat := pf24bit; // with 32 bit images I need this, don't know why 
    bmp2.Transparent := True; 
    bmp2.TransparentColor := clWhite; 
    bmp1.Canvas.Draw(0, 0, bmp2); // draw bmp2 over bmp1 

    // this is how the merged image looks like 
    Canvas.Draw(0, 0, bmp1); 
    .. 
+0

完美的作品!只要注意使用此代碼的人,請確保bmp1和bmp2的大小相同。如果bmp2小於bmp1,則bmp2將被放置在圖像的左上角。 –

3

在第二位圖的情況下,是黑色和白色,則可以在一個光柵操作與BitBlt(位塊傳送)使用它作爲掩模,如下所示:

Windows.BitBlt(Bmp3.Canvas.Handle, 0, 0, Bmp3.Width, Bmp3.Height, 
    Bmp1.Canvas.Handle, 0, 0, SRCCOPY); 
    Windows.BitBlt(Bmp3.Canvas.Handle, 0, 0, Bmp3.Width, Bmp3.Height, 
    Bmp2.Canvas.Handle, 0, 0, SRCAND);