Vielen Dank für die Antwort, aber ich habe gerade selbst eine Lösung gefunden und wollte das hier posten und dann hat doch jemand Hilfe für mich ^^
Für alle, die das gleiche Problem haben, hier einmal meine Lösung.
Dann könnt ihr euch zwischen einem der beiden Lösungwege entscheiden.
Delphi-Quellcode:
var btmp:TBitmap32;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
btmp := TBitmap32.Create;
btmp.Assign(Image1.picture.bitmap);
//ich lade das Bild aus einer TImage Komponente
macheTransparent(btmp,255,255,255);
//hier werden alle Pixel mit der Farbe 255,255,255 (also Weiß) Transparent gemacht
end;
procedure TForm1.ChromaKey(ABitmap: TBitmap32; TrColor: TColor32);
// former CromaKey <v1.8.3
var
P: PColor32;
C: TColor32;
I: Integer;
begin
TrColor := TrColor
and $00FFFFFF;
// erase alpha, (just in case it has some)
with ABitmap
do
begin
P := PixelPtr[0, 0];
for I := 0
to Width * Height - 1
do
begin
C := P^
and $00FFFFFF;
// get RGB without alpha
if C = TrColor
then // is this pixel "transparent"?
P^ := C;
// write RGB with "transparent" alpha back into the SrcBitmap
Inc(P);
// proceed to the next pixel
end;
end;
end;
procedure TForm1.macheTransparent(ABitmap: TBitmap32;rot,gruen,blau:byte);
var AColor32: TColor32;
begin
TColor32Entry(AColor32).A := 0;
//0 Transparent, 255 komplett nicht Transparent; macht bei meinem Test aber keinen Unterschied
TColor32Entry(AColor32).R := rot;
TColor32Entry(AColor32).G := gruen;
TColor32Entry(AColor32).B := blau;
ChromaKey(ABitmap,AColor32);
end;
Den Code hab ich mir, ausgehend von graphics32.org (einmal von
dieser Seite und von
dieser), zusammengesucht.