procedure TForm1.FormCreate(Sender: TObject);
var
  i : integer;
  b   : TStream;
  m   : TMemoryStream;
  bmp : TBitmap;
begin
  btnRunReport.Enabled := False;
  Table1.Active := True;
  dbimage1.Picture.SaveToFile('d:\temp\DbImage.bmp');
  //DbImage.bmp可以打开
  TGraphicField(table1.FieldByName('graphic')).SaveToFile('d:\temp\DbGraphic.bmp');
  TBlobField(table1.FieldByName('graphic')).SaveToFile('d:\temp\DbBlob.bmp');
  //DbGraphic.bmp和DbBlob.bmp用画图程序打不开,用ACDSEE打开后没有图像
  b := TStream.Create;
  b := table1.CreateBlobStream(table1.FieldByName('graphic'), bmread);
  m := TMemoryStream.Create;
  m.LoadFromStream(b);
  m.SaveToFile('d:\temp\MemoryImage.bmp');
  //MemoryImages.bmp用画图程序打不开,用ACDSEE打开后没有图像
  bmp := TBitmap.Create;
  bmp.LoadFromStream(b);
  bmp.SaveToFile('d:\temp\BitmapImage.bmp');
  //BitmapImage.bmp用画图程序打不开,用ACDSEE打开后没有图像
  image1.Picture.Graphic.LoadFromStream(b);
  //image1没有图像显示
  image1.Picture.Bitmap.LoadFromStream(b);
  //image1没有图像显示
end;我用UltraEdit比较那些打不开的文件,发现它们的二进制格式相同,但是同能打开的用DbImage控件导出的DbImage.bmp比较,却有很多地方不一样。这种问题谁能帮我解决?

解决方案 »

  1.   

    var
      i : integer;
      b   : TStream;
      m   : TMemoryStream;
      bmp : TBitmap;
    begin
      btnRunReport.Enabled := False;
      Table1.Active := True;
      dbimage1.Picture.SaveToFile('d:\temp\DbImage.bmp');
      //DbImage.bmp可以打开
      TGraphicField(table1.FieldByName('BMP')).SaveToFile('d:\temp\DbGraphic.bmp');
      TBlobField(table1.FieldByName('BMP')).SaveToFile('d:\temp\DbBlob.bmp');
      //DbGraphic.bmp和DbBlob.bmp用画图程序打不开,用ACDSEE打开后没有图像
      b := TStream.Create;
      b := table1.CreateBlobStream(table1.FieldByName('BMP'), bmread);
      m := TMemoryStream.Create;
      m.LoadFromStream(b);
      m.SaveToFile('d:\temp\MemoryImage.bmp');
      //MemoryImages.bmp用画图程序打不开,用ACDSEE打开后没有图像
      bmp := TBitmap.Create;
      bmp.LoadFromStream(b);
      bmp.SaveToFile('d:\temp\BitmapImage.bmp');
      //BitmapImage.bmp用画图程序打不开,用ACDSEE打开后没有图像
      b.Position:=8;                                       --增加
      //image1.Picture.Graphic.LoadFromStream(b);
      //image1没有图像显示
      image1.Picture.Bitmap.LoadFromStream(b);
      //image1没有图像显示
    end;这是我对Delphi自带的DBDEMOS数据库的animals表的BMP的数据操作,DbGraphic.bmp和DbBlob.bmp比
    DbImage.bmp多了八个字节,在Acdsee当然不能显示,这八个字节可能是DBImage的格式信息,你的表的
    graphic字段估计也是类似的原因(BMP文件是以字母BM开头的文件)
      

  2.   

    假如有效的图片信息是从8开始,则
    b.Position:=8;       
    tmpStream.LoadFromStream(b);
    tmpStream.SaveToFile('c:\aaa.bmp');这样就可以了
      

  3.   

    按 trainbox(rain) 的方法可以搞定了。谢谢!可是我有遇到个新问题,在我这里的老数据库中还有是以下面这种形式把图片信息存在text数据类型中(数据库为sql server),可我总也转不成图片文件。希望 trainbox(rain) 再能帮我解答。先谢谢了。附格式如下:003E0033002C002700240021001F001F001F00210022002300230022002200210020002000210023002400260027002700270026002500230023801E