2011-01-12 16 views
3

Ich habe eine Delphi-Bitmap (32Bit), die Transparenzinformationen hat. Ich muss konvertieren und speichern Sie es in eine PNG-Datei unter Beibehaltung der Transparenz.Bitmap mit Transparenz zu PNG in Delphi 2007 speichern

Die Werkzeuge, die ich derzeit habe, sind die Grafiken32 Bibliothek, GR32_PNG (von Christian Budde) und PNGImage (von Gustavo Daud).

Was ist der beste Weg, dies zu tun?

EDIT 1: Es gibt nicht nur eine Farbe in meiner Bitmap, die transparent ist, sondern Pixel mit verschiedenen Ebenen der Transparenz, die beibehalten werden müssen.

BEARBEITEN 2: Ich erhalte meine Bitmap mit Alpha-Informationen, indem ich den Hintergrund eines Bildes auf ein PNG setze, das ich mit nichts als einer leeren Alpha-Ebene habe. Dann schreibe ich Anti-Alias-Text darauf. Ich speichere dann die Bitmap. Beim Öffnen mit Gimp wird die Transparenz angezeigt und beim Zoomen wird der Effekt von Anti-Aliasing angezeigt.

Antwort

3

Ich konnte keine der beiden anderen Antworten zur Arbeit bekommen. Sie können für andere arbeiten, aber hier ist, was ich getan habe.

  1. Ich habe die Bitmap mit Transparenz erstellt.
  2. Zuordnung zu einem TBitmap32 aus der Graphics 32-Bibliothek.
  3. es zu einem TPortableNetworkGraphics32 von Christian Budde GR32_PNG für Graphics32 Assigned
  4. Genannt der TPortableNetworkGraphics32.SaveToFile Methode
1

Schauen Sie sich diese link

Es gibt eine Funktion:

function WriteBitmapToPngFile(Filename : string; Bitmap : TBitmap; TransparentColor:TColor):boolean; 
+0

in der Funktion auf den Code Blick scheint es, dass es macht nur 1 Farbe transparent anstelle der unterschiedlichen Ebenen, die Ich brauche. (habe die Frage aktualisiert, um dies klarzustellen). Ich habe es trotzdem versucht, indem ich PNGUnit und PNGLib über den angegebenen Link erstellt habe. Beim Aufruf der Funktion beginnt das Programm zu laufen, schließt sich aber bevor es das Hauptformular anzeigt, ohne dass ein Fehler aufgetreten ist. Vielen Dank für Ihre Hilfe. – Tim

4

Verwendung PNGImage. In Delphi, versuchen Sie dies:

function ConvertToPNG(oBMPSrc: TBitmap; sFilename: String); 
var 
    oPNGDest: TPNGObject; 
begin 
    oPNGDest := TPNGObject.Create; 
    try 
    oPNGDest.Assign(oBMPSrc); 
    oPNGDest.SaveToFile(sFilename); 
    finally 
    oPNGDest.Free; 
    end; 
end; 

Wenn das nicht für Sie arbeiten, werden Sie wahrscheinlich einzeln über die Alpha- und RGB-Werte zu kopieren.

function ConvertToPNG(oBMPSrc: TBitmap; sFilename: String); 
var 
    oPNGDest: TPNGObject; 
begin 
    oPNGDest := TPNGObject.CreateBlank(COLOR_RGBALPHA, 8, oBMPSrc.Width, oBMPSrc.Height); 
    try 
    oPNGDest.CreateAlpha; 
    // Copy over RGB 
    .. 
    // Copy over Alpha 
    .. 
    // Save to file 
    oPNGDest.SaveToFile(sFilename); 
    finally 
    oPNGDest.Free; 
    end; 
end; 
+0

Wenn ich das PNGImage-Gerät in mein Programm einfüge, zeigt das gespeicherte Bitmap, das ich erstellt habe (siehe EDIT 2 in der Hauptfrage), keine Transparenzinformationen mehr an. – Tim