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圖像。我究竟做錯了什麼?
我建議你不分享1 ** ** try..finally在多個資源的習慣。如果'TPNGImage.Create;'失敗,則會泄露TBitmap的實例。而是每個資源使用一次單獨的嘗試。即'Outer:= Txx.Create;嘗試內部:= Txx.Create;嘗試...終於Inner.Free;結束;最後Outer.Free;結束;' –
IMO,使用CF_BITMAP(如果可用)。這可能是無論如何正在發生的事情(兩種格式經常一起出現,你測試CF_PICTURE,但最終檢索CF_BITMAP)。但是在CF_BITMAP存在但CF_PICTURE不存在的情況下,您的代碼甚至不會執行。 –