ich bastle ja gerade an meinem Pixeleditor. Zum testen nutze ich ihn quasi täglich, heute stand auf dem Programm diverse .png Dateien zu erstellen, alle mit Transparenz (bisher hatte ich immer nur .bmp erstellt, bei denen clFuchsia als Transparent interpretiert wurde).
Zum Laden habe ich folgenden Code, und dieser Funktioniert 1a
Code: Alles auswählen
type
TRGBA = Record
r, g, b, a: Byte;
End;
Procedure TImage.ImportFromPNG(aFilename: String);
Var
png: TPortableNetworkGraphic;
b: TBitmap;
i, j: Integer;
TempIntfImg: TLazIntfImage;
c: TRGBA;
Begin
b := TBitmap.Create;
png := TPortableNetworkGraphic.Create;
png.LoadFromFile(aFilename);
b.Assign(png);
png.free;
SetSize(b.Width, b.Height);
TempIntfImg := TLazIntfImage.Create(0, 0);
TempIntfImg.LoadFromBitmap(b.Handle, b.MaskHandle);
BeginUpdate;
For j := 0 To height - 1 Do Begin
For i := 0 To Width - 1 Do Begin
c := FPColorToRGBA(TempIntfImg.Colors[i, j]);
c.a := 255 - c.a;
SetColorAt(i, j, c);
End;
End;
EndUpdate;
TempIntfImg.free;
b.free;
fChanged := false;
Filename := aFilename;
End;
Code: Alles auswählen
Procedure TImage.ExportAsPNG(aFilename: String);
Var
png: TPortableNetworkGraphic;
b: Tbitmap;
TempIntfImg: TLazIntfImage;
ImgHandle, ImgMaskHandle: HBitmap;
j, i: Integer;
c: TRGBA;
Begin
b := TBitmap.Create;
b.Width := Width;
b.Height := Height;
TempIntfImg := TLazIntfImage.Create(0, 0, [riqfRGB, riqfAlpha]);
TempIntfImg.LoadFromBitmap(b.Handle, b.MaskHandle);
TempIntfImg.SetSize(Width, Height);
For j := 0 To height - 1 Do Begin
For i := 0 To Width - 1 Do Begin
c := GetColorAt(i, j);
c.a := 255 - c.a;
TempIntfImg.Colors[i, j] := RGBAToFPColor(c);
End;
End;
TempIntfImg.CreateBitmaps(ImgHandle, ImgMaskHandle, false);
b.Handle := ImgHandle;
b.MaskHandle := ImgMaskHandle;
png := TPortableNetworkGraphic.Create;
png.Assign(b);
png.SaveToFile(aFilename);
png.free;
TempIntfImg.free;
b.free;
fChanged := false;
Filename := aFilename;
End;
Weiß einer hier im Forum was ich falsch mache ?