Hallo,
mein Programm soll aus vorhandenen Daten ein transparentes PNG-Bild erzeugen. Zuerst hatte ich den Alphawert einfach immer weggelassen, allerdings wollte ich nun versuchen ihn mit rein zunehmen, da die Bilder sonst immer einen schwarzen Hintergrund haben und das eben nicht so schön aussieht.
Delphi-Quellcode:
function ARGB(A, R, G, B: Byte): COLORREF;
begin
Result := B
or (G
shl 8)
or (R
shl 16)
or (A
shl 24);
end;
function TPNGMapleCanvas.Parse1(Input: TMemoryStream; deSize: Integer): TPNGImage;
var
n, x, y,
cc: Integer;
b1, b2: Word;
a, r, g, b: Word;
begin
Input.Position := 2;
// FWidth und Height werden vorher gelesen
Result := TPNGImage.CreateBlank(COLOR_RGBALPHA, 16, FWidth, FHeight);
n := 0;
x := 0;
y := 0;
while n < deSize
do
begin
if x = FWidth
then
begin
x := 0;
Inc(y);
if y = FHeight
then
Break;
end;
Input.
Read(b1, 1);
Input.
Read(b2, 1);
b := b1
and 15;
b := b
or (b
shl 4);
g := b1
and 240;
g := g
or (g
shr 4);
r := b2
and 15;
r := r
or (r
shl 4);
a := b2
and 240;
a := a
or (a
shr 4);
cc := ARGB(a, r, g, b);
Result.Canvas.Pixels[x, y] :=
cc;
Inc(n, 2);
Inc(x);
end;
end;
Das Problem ist, dass das Bild einfach nur weiß ist. Wenn ich COLOR_RGBALPHA in COLOR_RGB umwandle sehe ich nur die Umrisse (wegen ARGB und er erwartet ja
RGB).
C# macht einfach das:
Code:
[...]
bitmap.SetPixel(x, y, Color.FromArgb(a, r, g, b));
Warum kann es nicht auch in Delphi so einfach sein?
Hat jemand Ideen wie man das auch in Delphi hinkriegen kann?