Delphi编程判断图片文件的真实格式

减小字体 增大字体 作者:佚名  来源:转载  发布时间:2010-11-06 10:30:18

很多图片文件修改后缀名还是可以正常阅读,但却不知道其真实的文件格式,在这里用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
    finally
      MyImage.Free; // 释放内存流对象
    end;
  end;
end;

Tags:

作者:佚名
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论

广告位置B