有时候jpg后缀图片其实是png格式的图片。这样我们就需要将真实的格式还原出来;
procedure TForm1.Button6Click(Sender: TObject); var //声明变量 MyImage:TMemoryStream; //内存流对象 Buffer:Word; begin if strtoint(edit3.Text)<strtoint(edit4.Text) then //OpenDialog1是一个文件打开对话框 begin MyImage:=TMemoryStream.Create; //建立内存流对象 try MyImage.LoadFromFile(memo1.Lines.Strings[strtoint(edit3.Text)]); //把刚刚用户选择的文件载入到内存流中 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 CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.bmp'),False); deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]); end else if Buffer=$D8FF then //如果前两个字节是以D8FF[低位到高位] begin CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.jpg'),False); deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]); end else if Buffer=$4947 then begin CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.gif'),False); deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]); end else if Buffer=$050A then begin CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.pcx'),False); deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]); end else if Buffer=$5089 then begin CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.png'),False); deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]); end else if Buffer=$4238 then begin CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.psd'),False); deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]); end else if Buffer=$A659 then begin CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.ras'),False); deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]); end else if Buffer=$DA01 then begin CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.sgi'),False); deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]); end else if Buffer=$4949 then begin CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.TIFF'),False); deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]); end else //如是其他类型的文件的话,直接显示错误 begin CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.err'),False); deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]); end; finally MyImage.Free; //释放内存流对象 end; edit3.Text:=inttostr(strtoint(edit3.Text) +1); config_save; delay(100); button6.Click; end; end;
以上代码是成品中copy出来的代码,意思是检测格式,并复制一份真实格式的出来+上后缀。
把错误的删除!
标签:delphi
发表评论