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 파일로 끝나지 않고 모든 것을 변경할 수 없습니다. 예를 들어 이미지를 변환하여 팔레트를 사용한 다음 저장하기 전에 팔레트를 변경하거나 삭제할 수 있습니다. 그렇게하면 오류가 발생하지는 않지만 아마도 다른 프로그램에서는 이미지를 읽을 수 없습니다 (또는 적어도 원본 이미지와 다릅니다).