13,825
社区成员
发帖
与我相关
我的任务
分享
unit Unit55;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TImageType = (IT_None, IT_Error, IT_Bmp, IT_JPEG, IT_GIF, IT_PCX, IT_PNG,
IT_PSD, IT_RAS, IT_SGI, IT_TIFF);
TForm55 = class(TForm)
OpenDialog1: TOpenDialog;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form55: TForm55;
implementation
{$R *.dfm}
function CheckImageType(FileName: string): TImageType;
var
MyImage: TMemoryStream;
Buffer: Word;
begin
MyImage := TMemoryStream.Create;
try
MyImage.LoadFromFile(FileName);
MyImage.Position := 0;
if MyImage.Size = 0 then // 如果文件大小等于0,那么错误(
begin
Result := IT_Error;
Exit;
end;
MyImage.ReadBuffer(Buffer, 2); //读取文件的前2个字节,放到Buffer里面
case Buffer of
$4D42:
Result := IT_Bmp;
$D8FF:
Result := IT_JPEG;
$4947:
Result := IT_GIF;
$050A:
Result := IT_PCX;
$5089:
Result := IT_PNG;
$4238:
Result := IT_PSD;
$A659:
Result := IT_RAS;
$DA01:
Result := IT_SGI;
$4949:
Result := IT_TIFF;
else
Result := IT_None;
end;
finally
MyImage.Free;
end;
end;
procedure TForm55.Button1Click(Sender: TObject);
begin
if not OpenDialog1.Execute then
Exit;
if CheckImageType(OpenDialog1.FileName)<>IT_Bmp then
showmessage('不是BMP格式');
end;
end.
MyImage:=TMemoryStream.Create;
MyImage.LoadFromFile(FileName); //把刚刚用户选择的文件载入到内存流中
MyImage.Position := 0; //移动指针到最开头的位置
MyImage.ReadBuffer(Buffer,2); //读取文件的前2个字节,放到Buffer里面
if Buffer=$4D42 then //如果前两个字节是以4D42[低位到高位](因为内存中从左到右是从高位到低位,所以前面说BMP的文件头是$424D,用来和内存中的数据比较时就要反过来,用$4D42进行比较
begin
ShowMessage('BMP'); //那么这个是BMP格式的文件
end