GR32PNG
1.0.0
PNG庫,用於讀取和寫作PNG圖像與GR32庫中的TBITMAP32類結合使用。
為了使用庫,請確保您使用單元GR32_PNG。該單元使用GR32_PORTABLENETWORKGRAPHICS讀寫PNG文件,這也必須將文件添加到您的項目中。或者只需將目錄添加到庫路徑中即可。
將PNG加載到TBITMAP32實例的最簡單方法是使用:
LoadBitmap32FromPNG(Bitmap: TBitmap32; const Filename: string);
您可以通過使用該文件是有效的PNG文件
function IsValidPNG(const Filename: string): Boolean;
如果PNG文件來自流,也可以使用
LoadBitmap32FromPNG(Bitmap: TBitmap32; Stream: TStream);
喜歡
var
MemoryStream: TMemoryStream;
begin
MemoryStream := TMemoryStream.Create;
try
MemoryStream.LoadFromFile(FileName);
LoadBitmap32FromPNG(Bitmap, Stream);
finally
MemoryStream.Free;
end;
end;
如果將PNG文件作為資源嵌入可執行文件,這可能特別有用。在這種情況下,您可以輕鬆使用Tresourcestream
要將tbitmap32實例的內容保存到png文件或流式傳輸函數:
procedure SaveBitmap32ToPNG(Bitmap: TBitmap32; FileName: string);
procedure SaveBitmap32ToPNG(Bitmap: TBitmap32; Stream: TStream);
可以使用。
如果您使用簡單功能,則無法在加載過程中跟踪進度。為此,您必須創建一個tportablenetworkgraphic32的實例,然後手動加載PNG文件。在實際加載之前,您可以指定一個OnProgress處理程序以跟踪進度。然後,代碼看起來像這樣:
with TPortableNetworkGraphic32.Create do
try
OnProgress := OnProgressHandler;
LoadFromFile(Filename);
AssignTo(YourBitmap); // can be Image32.Bitmap for example
finally
Free;
end;
Onprogresshandler可能看起來像這樣的地方:
procedure TForm1.OnProgressHandler(Sender: TObject; Percent: Single);
begin
ProgressBar.Position := Round(Percent);
end;
如果您想在保存時更改某些設置,則需要手動執行此操作。然後,代碼看起來像這樣:
with TPortableNetworkGraphic32.Create do
try
AssignTo(YourBitmap); // can be Image32.Bitmap for example
Interlaced := imAdam7; // save as interlaced png file
SaveToFile(Filename);
finally
Free;
end;
使用當前實施狀態,不可能在不結束無效的PNG文件的情況下更改所有內容。例如,您可以將圖像轉換為使用pallete,然後在保存之前更改或刪除調色板。這樣做不會給您帶來錯誤,但是很可能該圖像無法通過其他程序(或至少與原始圖像不同)讀取。