我用如下的代码保存图片,这个图片是通过两个方式得到的,一个是选择图片,一个是通过扫描仪得到的图片,代码如下:
try
  if id_no=application.MessageBox('您确实要保存吗??','确认信息',mb_YesNo) then exit;
  ImageHolder.Picture.Graphic.SaveToStream(strm);
  //动态创建Query1\Query2的方法
  dzda_image_query := TADOQuery.Create(nil);
  dzda_image_query.Connection := dm.ADOConnection1;
  dzda_image_query.Close;
  dzda_image_query.SQL.Clear;
  str:='select * from dzda_table where dzda_id='''+dzda_tree_query.FieldByName('dzda_id').AsString+''' ';
  dzda_image_query.SQL.Add(str);
  dzda_image_query.Open;
  dzda_image_query.Edit ;
  strm.Position :=0;
  TBlobField(dzda_image_query.FieldByName('dzda_xl_image')).LoadFromStream(strm);
  //(OpenPictureDialog1.FileName);
  //以下记录保存到数据库的图像格式
  if uppercase(ext) = '.BMP' then
  dzda_image_query.FieldByName('dzda_xl_imlx').Value := 1 //BMP型图像数据
  else
    if (uppercase(ext) = '.JPG') OR ( uppercase(ext) = '.JPEG') or (uppercase(ext)='')Then
      dzda_image_query.FieldByName('dzda_xl_imlx').Value := 0; //JPEG型图像数据
      dzda_image_query.Post ;
finally
  strm.Free ; //笔者发现如strm采用tblobstream类,程序运行到该语句会出现问题
end;以上代码,是保存图片,下面的是读出图片:
strm := tadoblobstream.Create(tblobfield(dzda_image_query.fieldbyname('dzda_xl_image')),bmread);
//读取数据库的图片纪录======================================================================================
try //try1
  strm.position :=0;
  ImageHolder.Picture.Graphic := nil; //清除图像
  // BMP、JPEG两种图像数据必需分别处理
 if dzda_image_query.fieldbyname('dzda_xl_imlx').asstring ='1' then //BMP型图像数据
 begin //begin11
   bitmap := tbitmap.Create ;
 try //try11
   bitmap.LoadFromStream(strm);
   ImageHolder.Picture.Graphic := bitmap;
 finally
   bitmap.Free;
 end; //end try11
end //end begin11
else
 if dzda_image_query.fieldbyname('dzda_xl_imlx').asstring ='0' then //JPEG型图像数据
 begin //begin12
   jpegimage := tjpegimage.Create ;
try //try12
  strm.position :=0;
  jpegimage.LoadFromStream(strm);
  ImageHolder.Picture.Assign(jpegimage);
  //ImageHolder.Picture.Graphic := ;
finally
  jpegimage.Free ;
end; //end try12
//=============================================================================================================
end; //end begin12
finally
  strm.Free ;
end; //end try1可是读取的时候出现如下问题jpeg error #53,出现这个问题是用扫描仪,保存后,再读取出错的,而用直接选择的图片的方法,读取却没有问题,这是什么原因呢

解决方案 »

  1.   

    哎,问题找到了,是由于扫描仪,默认扫出的图片,是tif格式的。而我做的这个程序,只能存取
    jpg和bmp的,所以不能直接读取tif格式的文件,问题是找到了,可是如何存取tif 格式的图片,然后再读取呢
      

  2.   

    把TIF格式转换为JPG或BMP格式再做读取
      

  3.   

    怎么把tif转换成jpg呢,有这个办法吗
      

  4.   

    Acdsee4有个功能可以批量转图片格式
      

  5.   

    用ImageEn这个控件,既可以扫描也可以存取tif的图片