Perpustakaan PNG untuk membaca dan menulis gambar PNG dalam kombinasi dengan kelas TbitMap32 dari perpustakaan GR32.
Untuk menggunakan perpustakaan, pastikan Anda menggunakan unit GR32_PNG. Unit ini menggunakan GR32_PorableNetworkGraphics untuk membaca dan menulis file PNG, yang membuatnya perlu untuk menambahkan file ke proyek Anda juga. Atau cukup tambahkan direktori ke jalur perpustakaan.
Cara paling sederhana untuk memuat PNG ke instance tbitmap32 adalah dengan menggunakan:
LoadBitmap32FromPNG(Bitmap: TBitmap32; const Filename: string);
Anda dapat memeriksa apakah file tersebut adalah file PNG yang valid dengan menggunakan
function IsValidPNG(const Filename: string): Boolean;
Jika file PNG berasal dari aliran, orang juga dapat digunakan
LoadBitmap32FromPNG(Bitmap: TBitmap32; Stream: TStream);
seperti di
var
MemoryStream: TMemoryStream;
begin
MemoryStream := TMemoryStream.Create;
try
MemoryStream.LoadFromFile(FileName);
LoadBitmap32FromPNG(Bitmap, Stream);
finally
MemoryStream.Free;
end;
end;
Ini mungkin sangat berguna jika file PNG tertanam sebagai sumber daya ke dalam yang dapat dieksekusi. Dalam hal ini Anda dapat dengan mudah menggunakan tresourcestream
Untuk menyimpan konten instance tbitmap32 ke file png atau streaming fungsi:
procedure SaveBitmap32ToPNG(Bitmap: TBitmap32; FileName: string);
procedure SaveBitmap32ToPNG(Bitmap: TBitmap32; Stream: TStream);
dapat digunakan.
Jika Anda menggunakan fungsi sederhana, Anda tidak akan dapat melacak kemajuan selama pemuatan. Untuk melakukannya, Anda harus membuat instance dari TporableNetworkGraphic32 dan memuat file PNG secara manual. Sebelum benar -benar memuat Anda dapat menentukan penangan onprogress untuk melacak kemajuan. Kode kemudian akan terlihat seperti ini:
with TPortableNetworkGraphic32.Create do
try
OnProgress := OnProgressHandler;
LoadFromFile(Filename);
AssignTo(YourBitmap); // can be Image32.Bitmap for example
finally
Free;
end;
Di mana Onprogresshandler mungkin terlihat seperti ini:
procedure TForm1.OnProgressHandler(Sender: TObject; Percent: Single);
begin
ProgressBar.Position := Round(Percent);
end;
Jika Anda ingin mengubah beberapa pengaturan sambil menabung, Anda perlu melakukan ini secara manual juga. Kode kemudian dapat terlihat seperti ini:
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;
Dengan keadaan implementasi saat ini, tidak mungkin untuk mengubah segalanya tanpa mengakhiri dalam file PNG yang tidak valid. Misalnya Anda dapat mengonversi gambar untuk menggunakan palet dan kemudian mengubah atau menghapus palet sebelum disimpan. Melakukan hal itu tidak akan memberi Anda kesalahan, tetapi kemungkinan besar gambar tidak dapat dibaca oleh program lain (atau setidaknya berbeda dengan gambar asli).