Delphi从内存流中判断图片格式


废话不多说了,利用内存流来判断文件的格式,其实判断文件的前几个字节就可以简单的判断这个文件是什么类型的文件,例如
jpg文件 是 FFD8 (从低位到高位就要反过来 D8FF 下面都是一样)
BMP文件 是 424D ---4D42
其他的我就不一一列举了,想知道跟多文件类型分别是用什么字符作为文件的开头的话,下载个C32asm或者UE等这类16进制编辑器就可以看到了。
procedure TForm1.Button1Click(Sender: TObject); //Button1的单击事件
var  //声明变量
 MyImage:TMemoryStream;  //内存流对象
 Buffer:Word;
 i:integer;
begin
 if OpenDialog1.Execute then  //OpenDialog1是一个文件打开对话框,在Delphi组件面版的Dialog页中可以找到。
 begin
 MyImage:=TMemoryStream.Create; //建立内存流对象
try
 MyImage.LoadFromFile(OpenDialog1.FileName); //把刚刚用户选择的文件载入到内存流中
 MyImage.Position := 0;  //移动指针到最开头的位置
 if MyImage.Size = 0 then  //如果文件大小等于0,那么
 begin
 //错误
 ShowMessage('错误');
 Exit;
 end;
 MyImage.ReadBuffer(Buffer,2); //读取文件的前2个字节,放到Buffer里面

 if Buffer=$4D42 then //如果前两个字节是以4D42[低位到高位]
 begin
 ShowMessage('BMP'); //那么这个是BMP格式的文件
 end
 else if Buffer=$D8FF then //如果前两个字节是以D8FF[低位到高位]
 begin
 //JPEG
 ShowMessage('JPEG'); //........一样 下面不注释了
 end
 else if Buffer=$4947 then
 begin
 //GIF
 ShowMessage('GIF');
 end
 else if Buffer=$050A then
 begin
 //PCX
 ShowMessage('PCX');
 end
 else if Buffer=$5089 then
 begin
 //PNG
 ShowMessage('PNG');
 end
 else if Buffer=$4238 then
 begin
 //PSD
 ShowMessage('PSD');
 end
 else if Buffer=$A659 then
 begin
 //RAS
 ShowMessage('RAS');
 end
 else if Buffer=$DA01 then
 begin
 //SGI
 ShowMessage('SGI');
 end
 else if Buffer=$4949 then
 begin
 //TIFF
 ShowMessage('TIFF');
 end
 else  //如是其他类型的文件的话,直接显示错误
 begin
 //ERR
 ShowMessage('ERR');
 end; //if
 end; //if
finally
MyImage.Free;  //释放内存流对象
end;
end;
上面的过程只是简单的判断文件的前2个字节,如果想更加精确一点的话,可以把文件最后2个字节也判断上。

联系电话:
020-00000000
联系电话:
020-00000000
联系电话:
020-12345678