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,然后在保存之前更改或删除调色板。这样做不会给您带来错误,但是很可能该图像无法通过其他程序(或至少与原始图像不同)读取。