zoukankan      html  css  js  c++  java
  • 内存流判断图片格式

    资料来源:
    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
  • 相关阅读:
    警惕 InnoDB 和 MyISAM 创建 Hash 索引陷阱
    从头认识java-18.2 主要的线程机制(5)-守护线程与非守护线程
    leetcode
    算法学习笔记(五) 递归之 高速幂、斐波那契矩阵加速
    No WebApplicationContext found: no ContextLoaderListener registered?报错解决
    poj 3041 Asteroids (最小点覆盖)
    C语言函数--E
    APDU命令的结构和处理【转】
    Linux ALSA声卡驱动之一:ALSA架构简介【转】
    Linux 系统内核空间与用户空间通信的实现与分析
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/8727919.html
Copyright © 2011-2022 走看看