2013-09-22 14 views
5

Aynı boyuttaki iki veya daha fazla farklı bmp fotoğrafı birbirinin üstüne bindirerek birleştirilebilir mi? Aynı şekilde, Windows XP MS Paint'te de yapıldı: bir resmi diğerine yapıştırmak, ikincil renk saydam olmak.Fotoğrafların tek bir resimde üzerine basılması

Example

+5

mümkün. Bitti (birçoğu) (http://english.rejbrand.se/algosim/manual/pmproc/pmproc.html) kendim. –

+1

@AndreasRejbrand: Bu bağlantıya ve özellikle de içeriğe teşekkürler. Büyük referans. –

cevap

9

Sen bu yönde TBitmap arasında Transparent özelliğini kullanabilirsiniz. Bitmap'leriniz siyah bir kenarlığa sahip olduğundan, otomatik saydam bir renk (görüntü verilerinin ilk pikseli) işe yaramaz ve TransparentColor özelliğini 'clWhite' olarak ayarlamanız gerekir. aşağıdaki gibi ikinci bitmap halinde

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

Mükemmel çalışıyor! Bu kodu kullanan birine sadece bir not verin, bmp1 ve bmp2'nin aynı boyutta olduğundan emin olun. Bmp2, bmp1'den küçükse, görüntünün sol üst köşesine bmp2 yerleştirilir. –

3

, sen BitBlt (bit blok transferi) ile bir raster operasyonda bir maske olarak kullanabilirsiniz, siyah-beyaz: Kesinlikle

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); 
İlgili konular