2011-01-12 6 views
3

J'ai un bitmap Delphi (32 bits) qui contient des informations de transparence. J'ai besoin de convertir et de l'enregistrer dans un fichier PNG tout en préservant la transparence.Enregistrer bitmap avec transparence au format PNG dans Delphi 2007

Les outils que j'ai actuellement sont la bibliothèque graphics32, GR32_PNG (par Christian Budde), et PNGImage (par Gustavo daud).

Quelle est la meilleure façon de faire cela?

EDIT 1: Il n'y a pas qu'une seule couleur dans mon bitmap qui soit transparente, mais des pixels avec différents niveaux de transparence qui doivent être conservés.

EDIT 2: Je reçois mon bitmap avec des informations alpha en définissant l'arrière-plan d'une image sur un PNG que je n'ai avec rien d'autre qu'une couche alpha vide. Ensuite, j'écris un texte anti-aliasé dessus. Je puis enregistrer le bitmap. Quand il est ouvert avec gimp, il montre la transparence et en zoomant, vous pouvez voir l'effet de l'anti-aliasing.

Répondre

3

Je ne pouvais pas obtenir l'une des deux autres réponses à travailler. Ils peuvent travailler pour les autres mais voici ce que j'ai fait. J'ai créé le bitmap avec la transparence.

  1. Affecté à un TBitmap32 à partir de la bibliothèque Graphics 32.
  2. Affecté à un TPortableNetworkGraphics32 de la GR32_PNG de Christian Budde pour Graphics32
  3. appelé la méthode TPortableNetworkGraphics32.SaveToFile
1

Vérifiez cette link

Il y a une fonction:

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

En regardant le code dans la fonction, il semble que cela fait seulement au lieu 1 couleur transparente des différents niveaux qui J'ai besoin. (posez une question mise à jour pour clarifier cela). Cependant, je l'ai encore essayé en créant PNGUnit et PNGLib à partir du lien fourni. Lorsque vous appelez la fonction, le programme commence à s'exécuter mais se ferme avant même d'afficher le formulaire principal, sans aucun message d'erreur. Merci pour votre aide jusqu'à présent. – Tim

4

Utilisez PNGImage. Dans Delphi, essayez ceci:

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; 

Si cela ne fonctionne pas pour vous, vous aurez probablement à copier sur l'alpha et les valeurs RVB individuellement.

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

Si j'insère l'unité PNGImage dans mon programme, le bitmap sauvegardé que j'ai créé (cocher EDIT 2 dans la question principale) ne montre plus aucune information de transparence. – Tim

Questions connexes