Einzelnen Beitrag anzeigen

WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#1

PNG-Bild mit Transparenz erzeugen

  Alt 27. Sep 2009, 16:08
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?
  Mit Zitat antworten Zitat