2011-01-12 57 views
3

我有一個具有透明度信息的Delphi位圖(32Bit)。我需要將其轉換並保存爲PNG文件,同時保持透明度。在Delphi 2007中保存帶有PNG透明度的位圖

我現在擁有的工具是graphics32 Library,GR32_PNG(Christian Budde)和PNGImage(by Gustavo daud)。

這樣做的最好方法是什麼?

編輯1:我的位圖中不只有一種顏色是透明的,但需要保留不同級別的透明度的像素。

編輯2:我通過將圖像的背景設置爲PNG來獲取帶有alpha信息的位圖我只有一個空的alpha層。然後我在其上寫入反鋸齒文本。然後我保存位圖。當用gimp打開時,它會顯示透明度,放大後可以看到抗鋸齒效果。

回答

3

我無法得到其他兩個工作的答案。他們可能爲別人工作,但這是我所做的。

  1. 我用透明度創建了位圖。
  2. 從Graphics 32庫中將其分配給TBitmap32。
  3. 它指定給TPortableNetworkGraphics32從基督教佈德的GR32_PNG爲Graphics32
  4. 叫TPortableNetworkGraphics32.SaveToFile方法
1

看看這個link

還有一個功能:

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

尋找在函數的代碼看來,它不僅使1個色透明的,而不是不同水平那我需要。 (有更新的問題,以清楚)。不過,我仍然通過從提供的鏈接創建PNGUnit和PNGLib來嘗試它。當調用函數時,程序開始運行,但在它顯示主窗體之前關閉,沒有任何錯誤消息。感謝您的幫助。 – Tim 2011-01-12 17:36:38

4

使用PNGImage。在Delphi中,試試這個:

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; 

如果不爲你工作,你可能有過alpha和RGB值分別複製。

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

如果我在程序中包含PNGImage單元,我創建的保存位圖(在主要問題中檢查編輯2)不再顯示任何透明度信息。 – Tim 2011-01-12 19:18:13