2015-01-12 110 views
3

我有以下簡單的代碼轉換剪貼板圖像到bmp,然後爲PNG:德爾福 - 轉換BMP至PNG失敗

if Clipboard.HasFormat(CF_PICTURE) then 
begin 
    bitmap := TBitmap.Create; 
    png := TPNGImage.Create; 
    try 
     bitmap.Assign(Clipboard); 
     bitmap.SaveToFile(ExtractFilePath(application.ExeName) + '\filename.bmp'); 
     png.Draw(bitmap.Canvas, Rect(0, 0, bitmap.Width, bitmap.Height)); 
     png.SaveToFile(extractfilepath(application.ExeName) + '\filename.png'); 
    finally 
     bitmap.free; 
     png.free; 
    end; 
end; 

而轉換爲bmp的作品,我甚至可以在MSPAINT打開它,看看其內容,轉換爲PNG失敗,我有一個空白PNG圖像。我究竟做錯了什麼?

+0

我建議你不分享1 ** ** try..finally在多個資源的習慣。如果'TPNGImage.Create;'失敗,則會泄露TBitmap的實例。而是每個資源使用一次單獨的嘗試。即'Outer:= Txx.Create;嘗試內部:= Txx.Create;嘗試...終於Inner.Free;結束;最後Outer.Free;結束;' –

+0

IMO,使用CF_BITMAP(如果可用)。這可能是無論如何正在發生的事情(兩種格式經常一起出現,你測試CF_PICTURE,但最終檢索CF_BITMAP)。但是在CF_BITMAP存在但CF_PICTURE不存在的情況下,您的代碼甚至不會執行。 –

回答

7

您尚未設置PNG圖像對象的尺寸(高度和寬度)。在繪製之前,您需要這樣做。

然而更容易將是一個簡單的任務:

png.Assign(Bitmap);