2012-06-11 61 views
3

如何完全禁用透明度給出PNGObject?順便說一句,我使用1.564版的PNGImage單元。如何禁用透明度PNG

+3

是什麼意思禁用透明度?你是否想將顏色格式/位深度設置爲Truecolor?這是每個像素24位,沒有alpha。 –

+0

@大衛是! :) –

+0

@Roberts,爲什麼你想不透明度PNG?我想如果你想要的話,您可將TPngImage對象到一個新的TBitmap對象,然後重新分配TBitmap對象回TPngImage對象。我不是100%肯定這會起作用,但我認爲它應該。 – Elling

回答

8

我不認爲這是可能永久禁用TPNGObject圖像的透明度。或者至少我找不到這樣做的財產。它應該是由一個屬性當您分配或加載圖像,因爲控制,則TPNGObject從指定的圖像文件接收圖片參數(包括透明度)。

因此,作爲一種變通方法我寧願使用RemoveTransparency程序後,當您加載或指定圖像:

uses 
    PNGImage; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    PNGObject: TPNGObject; 
begin 
    PNGObject := TPNGObject.Create; 
    try 
    PNGObject.LoadFromFile('C:\Image.png'); 
    PNGObject.RemoveTransparency; 
    PNGObject.Draw(Canvas, Rect(0, 0, PNGObject.Width, PNGObject.Height)); 
    finally 
    PNGObject.Free; 
    end; 
end; 
1

對於剛剛繪製TPNGObject(德爾福PNGComponents庫)的一些背景顏色(例如:白色),請嘗試以下操作:

uses 
    PNGImage, PNGFunctions; 

procedure TForm1.Button1Click(Sender: TObject); 
var png: TPNGObject; 
    bmp: TBitmap; 
begin 
    try 
    // load PNG 
    png := TPNGObject.Create; 
    png.LoadFromFile('MyPNG.png'); 

    // create Bitmap 
    bmp := TBitmap.Create; 
    bmp.Width := png.Width; 
    bmp.Height := png.Height; 

    // set background color to whatever you want 
    bmp.Canvas.Brush.Color := clWhite; 
    bmp.Canvas.FillRect(Rect(0, 0, png.Width, png.Height)); 

    // draw PNG on Bitmap with alpha blending 
    DrawPNG(png, bmp.Canvas, Rect(0, 0, png.Width, png.Height), []); 

    // save Bitmap 
    bmp.SaveToFile('MyBMP.bmp'); 

    finally 
    FreeAndNil(png); 
    FreeAndNil(bmp); 
    end; 
end; 

要使用DrawPNG過程,必須包含PNGFunctions單元。