求一段讀取TMemoryStream 二進制流的頭檔案,來判斷檔案型別的示例代碼,謝謝
uj5u.com熱心網友回復:
以下內容是轉回來的,圖片的檔案頭格式:1.JPEG
- 檔案頭標識 (2 bytes): $ff, $d8 (SOI) (JPEG 檔案標識)
- 檔案結束標識 (2 bytes): $ff, $d9 (EOI)
2.TGA
- 未壓縮的前5位元組 00 00 02 00 00
- RLE壓縮的前5位元組 00 00 10 00 00
3.PNG
- 檔案頭標識 (8 bytes) 89 50 4E 47 0D 0A 1A 0A
4.GIF
- 檔案頭標識 (6 bytes) 47 49 46 38 39(37) 61
G I F 8 9 (7) a
5.BMP
- 檔案頭標識 (2 bytes) 42 4D
B M
6.PCX
- 檔案頭標識 (1 bytes) 0A
7.TIFF
- 檔案頭標識 (2 bytes) 4D 4D 或 49 49
8.ICO
- 檔案頭標識 (8 bytes) 00 00 01 00 01 00 20 20
9.CUR
- 檔案頭標識 (8 bytes) 00 00 02 00 01 00 20 20
10.IFF
- 檔案頭標識 (4 bytes) 46 4F 52 4D
F O R M
11.ANI
- 檔案頭標識 (4 bytes) 52 49 46 46
R I F F
MyImage:=TMemoryStream.Create;
MyImage.LoadFromFile(FileName); //把剛剛用戶選擇的檔案載入到記憶體流中
MyImage.Position := 0; //移動指標到最開頭的位置
MyImage.ReadBuffer(Buffer,2); //讀取檔案的前2個位元組,放到Buffer里面
if Buffer=$4D42 then //如果前兩個位元組是以4D42[低位到高位](因為記憶體中從左到右是從高位到低位,所以前面說BMP的檔案頭是$424D,用來和記憶體中的資料比較時就要反過來,用$4D42進行比較
begin
ShowMessage('BMP'); //那么這個是BMP格式的檔案
end
uj5u.com熱心網友回復:
想看更多的檔案頭的內容,看這個網址:http://www.garykessler.net/library/file_sigs.htmluj5u.com熱心網友回復:
本文主要講解了如何判斷一個圖片檔案的真實型別,并不是從后綴名來判斷型別的方法:以下是參考片段:
unit Unit55;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TImageType = (IT_None, IT_Error, IT_Bmp, IT_JPEG, IT_GIF, IT_PCX, IT_PNG,
IT_PSD, IT_RAS, IT_SGI, IT_TIFF);
TForm55 = class(TForm)
OpenDialog1: TOpenDialog;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form55: TForm55;
implementation
{$R *.dfm}
function CheckImageType(FileName: string): TImageType;
var
MyImage: TMemoryStream;
Buffer: Word;
begin
MyImage := TMemoryStream.Create;
try
MyImage.LoadFromFile(FileName);
MyImage.Position := 0;
if MyImage.Size = 0 then // 如果檔案大小等于0,那么錯誤(
begin
Result := IT_Error;
Exit;
end;
MyImage.ReadBuffer(Buffer, 2); //讀取檔案的前2個位元組,放到Buffer里面
case Buffer of
$4D42:
Result := IT_Bmp;
$D8FF:
Result := IT_JPEG;
$4947:
Result := IT_GIF;
$050A:
Result := IT_PCX;
$5089:
Result := IT_PNG;
$4238:
Result := IT_PSD;
$A659:
Result := IT_RAS;
$DA01:
Result := IT_SGI;
$4949:
Result := IT_TIFF;
else
Result := IT_None;
end;
finally
MyImage.Free;
end;
end;
procedure TForm55.Button1Click(Sender: TObject);
begin
if not OpenDialog1.Execute then
Exit;
if CheckImageType(OpenDialog1.FileName)<>IT_Bmp then
showmessage('不是BMP格式');
end;
end.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/81030.html
標籤:基礎類
