GR32ライブラリのTBITMAP32クラスと組み合わせたPNG画像を読み書きするためのPNGライブラリ。
ライブラリを使用するには、ユニット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ファイルで終了せずにすべてを変更することはできません。たとえば、画像を変換してパレットを使用してから、保存する前にパレットを変更または削除できます。そうすることでエラーが発生しませんが、おそらく画像は他のプログラムで読み取られない(または少なくとも元の画像とは異なる)。