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个字节也判断上。

相关阅读 >>

Delphi firedac tfddatamove 导出csv

Delphi用ado操作数据库完整示例

Delphi中使用低层钩子 屏蔽win、ctrl+esc、alt+tab、alt+f4

Delphi 执行一个外部程序,当外部程序结束后言主程序立即响应

Delphi中判断某个文件是否已经打开

Delphi 编译发布安卓的app名字问题

Delphi cannot find implementation of method formcreate 解决办法

Delphi tstreamreader 和tstreamwriter

Delphi dateof、timeof、yearof、monthof、weekof、dayof、hourof、minuteof、secondof、millisecondof �c 提取时间成分

Delphi tnethttpclient https忽略证书验证

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...