개요
잘 알려진 이미지 파일 및 스트림을 이용해 이미지 타입을 얻는 모듈입니다.
이미지 소스타입 얻기 라이브러리
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.
'프로그래밍 > Delphi' 카테고리의 다른 글
확장자를 이용한 자동실행 처리 방법 (0) | 2014.01.29 |
---|---|
DataSnap/REST ISAPI Dll 모듈 생성/디버깅/배포 방법 (1) | 2013.12.09 |
[REST-Delphi #3] 델파이과 JSON (2) | 2013.09.02 |
[REST-Delphi #2] 델파이 관점에서의 REST (0) | 2013.09.02 |
[REST-Delphi #1] 델파이 DataSnap을 이용한 REST 프로그래밍 요약 (0) | 2013.09.02 |