内存流判断图片格式

 

资料来源:
https://blog.csdn.net/my98800/article/details/53536774

 

注意:

1.下载个“C32asm”或者“UE"等这类16进制编辑器可以查看图片格式。
2.只是简单的判断文件的前2个字节,如果想更加精确一点的话,可以把文件最后2个字节也判断上。
3.有朋友发现,前几字节用的正是"bmp""jpg""png"等的ASCII码。

 

实例代码:

  1 unit Unit1;
  2 
  3 interface
  4 
  5 uses
  6   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
  8 
  9 type
 10   TForm1 = class(TForm)
 11     Button1: TButton;
 12     OpenDialog1: TOpenDialog;
 13     procedure Button1Click(Sender: TObject);
 14   private
 15     { Private declarations }
 16   public
 17     { Public declarations }
 18   end;
 19 
 20 var
 21   Form1: TForm1;
 22 
 23 implementation
 24 
 25 {$R *.dfm}
 26 
 27 //Button1的单击事件
 28 procedure TForm1.Button1Click(Sender: TObject);
 29 var
 30    MyImage: TMemoryStream;//内存流对象
 31    Buffer:Word;
 32    i:integer;
 33 begin
 34   //OpenDialog1是一个文件打开对话框,在Delphi组件面版的Dialog页中可以找到。
 35   if OpenDialog1.Execute then
 36   begin
 37     MyImage:=TMemoryStream.Create;  //建立内存流对象
 38     try
 39       MyImage.LoadFromFile(OpenDialog1.FileName);  //把刚刚用户选择的文件载入到内存流中
 40       MyImage.Position := 0;   //移动指针到最开头的位置
 41       if MyImage.Size = 0 then   //如果文件大小等于0,那么
 42       begin
 43         //错误
 44         ShowMessage('错误');
 45         Exit;
 46       end;
 47       MyImage.ReadBuffer(Buffer,2);  //读取文件的前2个字节,放到Buffer里面
 48 
 49       if Buffer=$4D42 then  //如果前两个字节是以4D42[低位到高位]
 50       begin
 51         ShowMessage('BMP');  //那么这个是BMP格式的文件
 52       end
 53       else if Buffer=$D8FF then  //如果前两个字节是以D8FF[低位到高位]
 54       begin
 55         //JPEG
 56         ShowMessage('JPEG');  //........一样 下面不注释了
 57       end
 58       else if Buffer=$4947 then
 59       begin
 60         //GIF
 61         ShowMessage('GIF');
 62       end
 63       else if Buffer=$050A then
 64       begin
 65         //PCX
 66         ShowMessage('PCX');
 67       end
 68       else if Buffer=$5089 then
 69       begin
 70         //PNG
 71         ShowMessage('PNG');
 72       end
 73       else if Buffer=$4238 then
 74       begin
 75         //PSD
 76         ShowMessage('PSD');
 77       end
 78       else if Buffer=$A659 then
 79       begin
 80         //RAS
 81         ShowMessage('RAS');
 82       end
 83       else if Buffer=$DA01 then
 84       begin
 85         //SGI
 86         ShowMessage('SGI');
 87       end
 88       else if Buffer=$4949 then
 89       begin
 90         //TIFF
 91         ShowMessage('TIFF');
 92       end
 93       else   //如是其他类型的文件的话,直接显示错误
 94       begin
 95         //ERR
 96         ShowMessage('ERR');
 97       end; //if
 98     finally
 99       MyImage.Free;   //释放内存流对象
100     end;
101   end;
102 end;
103 
104 end.
View Code

 

posted on 2018-04-06 15:45  疯狂delphi  阅读(767)  评论(0编辑  收藏  举报

导航