Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi 2 Bitmaps miteinander verschmelzen/überlagern (https://www.delphipraxis.net/32613-2-bitmaps-miteinander-verschmelzen-ueberlagern.html)

c.martin 26. Okt 2004 09:45


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

Phantom1 26. Okt 2004 09:55

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;

Beckman 26. Okt 2004 11:11

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 :(

Phantom1 26. Okt 2004 12:26

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:
d.b:=(s1.b*nAlpha + s2.b*Alpha) shr 8;
folgendes verwenden:

Delphi-Quellcode:
d.b:=(s1.b*nAlpha + s2.b*Alpha) Div 255;
jedoch ist SHR wesentlich schneller als Div 8)

Beckman 26. Okt 2004 12:51

Re: 2 Bitmaps miteinander verschmelzen/überlagern
 
cool, danke :)

dizzy 26. Okt 2004 13:01

Re: 2 Bitmaps miteinander verschmelzen/überlagern
 
Alternativ wäre noch die Graphics32-Lib erwähnenswert. Die unterstützt von Hause aus einen Alphakanal, und mit diesem lässt sich sowas recht komfortabel+schnell machen 8)

gruss,
Fabian


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz