![]() |
2 Bitmaps miteinander verschmelzen/überlagern
Hallo,
kennt jemand eine Lösung wie man in Delphi 2 Bitmaps miteinander (z.B. 50% jedes Bild) verschmelzen bzw. überlagern kann. Ich bin um jeden Tipp dankbar. C.Martin |
Re: 2 Bitmaps miteinander verschmelzen/überlagern
kein problem. hier eine prozedure von mir:
der parameter Alpha gibt die transparenz an (0-255):
Delphi-Quellcode:
procedure MergeBmp(Src1, Src2, Dest: TBitmap; Alpha: Byte);
type TARGB = packed record b, g, r, a: Byte end; var s1, s2, d: ^TARGB; nAlpha: Byte; i: Integer; begin if not (Assigned(Src1) or Assigned(Src2) or Assigned(Dest)) then Exit; if (Src1.Width<>Src2.Width) or (Src1.Height<>Src2.Height) then Exit; Src1.PixelFormat:=pf32bit; Src2.PixelFormat:=pf32bit; Dest.PixelFormat:=pf32bit; Dest.Width:=Src1.Width; Dest.Height:=Src1.Height; s1:=Src1.ScanLine[Src1.Height-1]; s2:=Src2.ScanLine[Src2.Height-1]; d:=Dest.ScanLine[Dest.Height-1]; nAlpha:=not Alpha; for i:=1 to Dest.Width*Dest.Height do begin d.b:=(s1.b*nAlpha + s2.b*Alpha) shr 8; d.g:=(s1.g*nAlpha + s2.g*Alpha) shr 8; d.r:=(s1.r*nAlpha + s2.r*Alpha) shr 8; Inc(s1); Inc(s2); Inc(d); end; end; |
Re: 2 Bitmaps miteinander verschmelzen/überlagern
hmmm. auch gleich mitschaufel das wissen :)
auch wenn ich das 'shr' noch net peil, weil es so ungut erklaert ist in der hilfe :( |
Re: 2 Bitmaps miteinander verschmelzen/überlagern
@Beckman: das SHR 8 verschiebt nur 8 Bits nach rechts. In meinem Beispiel könntest du auch statt:
Delphi-Quellcode:
folgendes verwenden:
d.b:=(s1.b*nAlpha + s2.b*Alpha) shr 8;
Delphi-Quellcode:
jedoch ist SHR wesentlich schneller als Div 8)
d.b:=(s1.b*nAlpha + s2.b*Alpha) Div 255;
|
Re: 2 Bitmaps miteinander verschmelzen/überlagern
cool, danke :)
|
Re: 2 Bitmaps miteinander verschmelzen/überlagern
Alternativ wäre noch die
![]() gruss, Fabian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz