ไลบรารี PNG สำหรับการอ่านและการเขียนภาพ PNG ร่วมกับคลาส TBITMAP32 จากไลบรารี GR32
เพื่อใช้ไลบรารีให้แน่ใจว่าคุณใช้หน่วย 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 จากนั้นเปลี่ยนหรือลบจานสีก่อนที่จะบันทึก การทำเช่นนั้นจะไม่ให้ข้อผิดพลาด แต่ส่วนใหญ่อาจเป็นภาพที่ไม่สามารถอ่านได้โดยโปรแกรมอื่น ๆ (หรืออย่างน้อยก็แตกต่างจากภาพต้นฉบับ)