개요
잘 알려진 이미지 파일 및 스트림을 이용해 이미지 타입을 얻는 모듈입니다.
이미지 소스타입 얻기 라이브러리
const
JPG_HEADER: array[0..2] of byte = ($FF, $D8, $FF);
GIF_HEADER: array[0..2] of byte = ($47, $49, $46);
BMP_HEADER: array[0..1] of byte = ($42, $4D);
PNG_HEADER: array[0..3] of byte = ($89, $50, $4E, $47);
TIF_HEADER: array[0..2] of byte = ($49, $49, $2A);
type
TImageType = (ifUnknown, ifJPG, ifGIF, ifBMP, ifPNG, ifTIF);
...
function GetImageType(ImageStream : TMemoryStream): TImageType;
begin
Result := ifUnknown;
try
if ImageStream.Size > 4 then
begin
if CompareMem(ImageStream.Memory, @JPG_HEADER, SizeOf(JPG_HEADER)) then
Result := ifJPG
else if CompareMem(ImageStream.Memory, @GIF_HEADER, SizeOf(GIF_HEADER)) then
Result := ifGIF
else if CompareMem(ImageStream.Memory, @PNG_HEADER, SizeOf(PNG_HEADER)) then
Result := ifPNG
else if CompareMem(ImageStream.Memory, @BMP_HEADER, SizeOf(BMP_HEADER)) then
Result := ifBMP
else if CompareMem(ImageStream.Memory, @TIF_HEADER, SizeOf(TIF_HEADER)) then
Result := ifTIF;
end;
finally
end;
end;
function GetImageType(FileName: String): TImageType;
var
Stream: TFileStream;
MemStr: TMemoryStream;
begin
Result := ifUnknown;
Stream := TFileStream.Create(FileName, fmOpenRead);
MemStr := TMemoryStream.Create;
try
MemStr.CopyFrom(Stream, 5);
Result := GetImageType(MemStr);
finally
Stream.Free;
MemStr.Free;
end;
end;
function ImageTypeToStr(ImageType: TImageType): String;
begin
case ImageType of
ifJPG: Result := 'Image/JPEG';
ifGIF: Result := 'Image/GIF';
ifPNG: Result := 'Image/PNG';
ifBMP: Result := 'Image/BMP';
ifTIF: Result := 'Image/TIFF';
else
Result := 'Unknown Type';
end;
end;
이미지 소스타입 얻기 테스트
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, pngimage, jpeg, StdCtrls, ExtDlgs, ImageUtils;
type
TfrmMain = class(TForm)
OpenPictureDialog1: TOpenPictureDialog;
btnTestGetImageType: TButton;
procedure btnTestGetImageTypeClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.btnTestGetImageTypeClick(Sender: TObject);
var
rlt : TImageType;
begin
if OpenPictureDialog1.Execute then
begin
rlt := GetImageType(OpenPictureDialog1.FileName);
ShowMessage(ImageTypeToStr(rlt));
end;
end;
end.
반응형
'IT > 델파이' 카테고리의 다른 글
델파이 DataSnap을 이용한 REST 프로그래밍 요약 (0) | 2023.02.13 |
---|---|
델파이 JSON (0) | 2023.02.13 |
DataSnap/REST ISAPI Dll 모듈 생성/디버깅/배포 방법 (0) | 2023.02.12 |
확장자를 이용한 자동실행 처리 방법 (0) | 2023.02.12 |
델파이(Delphi)를 이용한 안드로이드 앱개발 2/2 (0) | 2023.02.12 |