delphi 从数据库 读\写 图片

来源:互联网 发布:装潢艺术设计专业软件 编辑:程序博客网 时间:2024/05/09 18:33

uses JPEG,DB; ­

{写入}

procedure TForm1.Button1Click(Sender: TObject); //加载图片 ­

begin ­

if open.Execute then ­

begin ­

  form1.ADOQuery1.Close; ­

  form1.ADOQuery1.SQL.Text:='insert into text(pic) values(:pic)'; ­

  form1.ADOQuery1.Parameters.ParamByName('pic').LoadFromFile(open.FileName,ftBlob); ­

  form1.ADOQuery1.ExecSQL; ­

end; ­

end; ­

­

{读取}

procedure TForm1.ShowPicture; ­

var ­

MS: TMemoryStream; ­

JpegImage: TJpegImage; ­

Buffer:Word;

begin ­

MS := TMemoryStream.Create; ­

TBlobField(AdoTable1.FieldByName('picture')).SaveToStream(MS); ­

MS.Position := 0; ­

ms.ReadBuffer(Buffer,2);

if Buffer=$D8FF  then   {JPEG}

begin 

 JpegImage := TJpegImage.Create; ­

 JpegImage.LoadFromStream(MS); ­

 Image1.Picture.Graphic := JPegImage; ­

 JpegImage.Free; ­

end ­

else if Buffer=$4D42 then {BMP}

begin

  Image1.Picture.Bitmap.LoadFromStream(MS) ­

end;

MS.Free; ­

end; ­



----------------------------------------------------------------------------- ­

jpg文件 是 FFD8 (从低位到高位就要反过来 D8FF 下面都是一样) ­

BMP文件 是 424D ---4D42 ­

其他的我就不一一列举了,想知道跟多文件类型分别是用什么字符作为文件的开头的话,下载个C32asm或者UE等这类16进制编辑器就可以看到了。 ­

procedure TForm1.Button1Click(Sender: TObject); //Button1的单击事件 ­

 

var  

var  

//声明变量 ­

 

   MyImage:TMemoryStream;   //内存流对象 ­

   Buffer:Word; ­

   i:integer; ­

begin ­

   if OpenDialog1.Execute then  

//OpenDialog1是一个文件打开对话框,在Delphi组件面版的Dialog页中可以找到。 ­

 

  

  

begin ­

 

     MyImage:=TMemoryStream.Create; //建立内存流对象

     MyImage:=TMemoryStream.Create; //建立内存流对象

­

 

 

 

 

try ­

 

     MyImage.LoadFromFile(OpenDialog1.FileName);

     MyImage.LoadFromFile(OpenDialog1.FileName);

//把刚刚用户选择的文件载入到内存流中 ­

 

     MyImage.Position := 0;  

     MyImage.Position := 0;  

//移动指针到最开头的位置 ­

 

     if MyImage.Size = 0 then  

     if MyImage.Size = 0 then  

//如果文件大小等于0,那么 ­

 

    

    

begin ­

 

      

      

//错误 ­

 

       ShowMessage('错误'); ­

       Exit; ­

    

end; ­

 

     MyImage.ReadBuffer(Buffer,2);

     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

Buffer=$050A

then ­

     begin ­

 

         //PCX ­

       ShowMessage('PCX'); ­

    

end ­

     else if

Buffer=$5089

Buffer=$5089

then ­

     begin ­

 

         //PNG ­

       ShowMessage('PNG'); ­

    

end ­

     else if

Buffer=$4238

Buffer=$4238

then ­

     begin ­

 

       //PSD ­

       ShowMessage('PSD'); ­

    

end ­

     else if

Buffer=$A659

Buffer=$A659

then ­

     begin ­

 

       //RAS ­

       ShowMessage('RAS'); ­

    

end ­

     else if

Buffer=$DA01

Buffer=$DA01

then ­

     begin ­

 

        

        

//SGI ­

 

       ShowMessage('SGI'); ­

    

end ­

     else if

Buffer=$4949

Buffer=$4949

then ­

     begin ­

 

        

        

//TIFF ­

 

       ShowMessage('TIFF'); ­

    

end ­

     else  

//如是其他类型的文件的话,直接显示错误 ­

 

     begin ­

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

         //ERR ­

       ShowMessage('ERR'); ­

     end;

//if ­

 

   end; //if

   end; //if

­

 

 

finally ­

MyImage.Free;   //释放内存流对象 ­

end; ­

­

上面的过程只是简单的判断文件的前2个字节,如果想更加精确一点的话,可以把文件最后2个字节也判断上。

原创粉丝点击