内存流判断图片格式
资料来源:
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.
作者:疯狂Delphi
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
欢迎关注我,一起进步!扫描下方二维码即可加我