oracle数据库,blob字段,导出为jpg文件,再用TImage控件加载时报错:Jpeg error #68(200分)

  • 主题发起人 主题发起人 fenian
  • 开始时间 开始时间
F

fenian

Unregistered / Unconfirmed
GUEST, unregistred user!
oracle数据库,blob字段,保存的是图象,通过plsql将该图象保存为jpg文件,然后用delphi的TImage加载进来是正常的。
如果通过程序:
stream := tbl1.CreateBlobStream(tbl1.FieldByName('RXZP'), bmRead);
try
if (stream.Size>6) then
if (pInteger(pchar(TMemoryStream(stream).Memory)+6)^=PInteger(JFIFFlag)^) then
begin
JPG:=TJpegImage.Create;
try
try
JPG.LoadFromStream(stream);
JPG.SaveToFile('c:/1.jpg');
img1.Picture.LoadFromFile('c:/1.jpg');
Except
img1.Picture.Graphic:=nil;
end;
finally
JPG.Free;
end;
end;
finally
stream.Free;
end;

这种方式导出的jpg文件,用delphi的TImage加载进来时报错:Jpeg error #68。
但是图片能够正常显示,好象是在 paint 方法中抱的错。用别的看图工具打开也是没问题的,vb加载也正常,总之就是delphi加载时会报错。
望各位教我,谢谢!

注:该表有几十万条记录,大多数的记录都是正常的,但是就是有那么一小部分的记录的图象导出再加载的时候报错。之前这些记录是怎么进入数据库的我也不知道!

哪位大哥有兴趣,我将导出的jpg文件发给你,你可以加载进来试试看,真的是很奇怪!除了delphi会报错,别的工具打开都没问题!我的qq:331215792
 
很奇怪的问题。
你新开一个form,加入image测试你这点代码。可能你的问题不是出在这些代码上 。
 
我在设计期用image控件的"picture-->load"加载的图片文件就报错,和运行期“img1.Picture.LoadFromFile('c:/1.jpg');”的报错是一样的
 
JPG.LoadFromStream(stream);
在这个前面加一行stream.Position:=0:
 
那我怀疑你的delphi本身是不是有问题了。和你的代码没有关系。
 
给个列子:
procedure TDM.DataSet_PICAfterScroll(DataSet: TDataSet);
var
mm: TMemoryStream;
Image:TJpegImage;
begin
if not start_Scroll then exit;
if DataSet_PIC.RecordCount<=0 then exit;
mm := TMemoryStream.Create;
Image:=TJpegImage.Create;
try
TBlobField(DataSet_PIC.FieldByName('CUST_PIC')).SaveToStream(mm);
if mm.Size=0 then exit;
mm.Position:=0;//这里必须,否则随即出错
Image.LoadFromStream(mm);
PImage.picture.Bitmap.Assign(Image);
finally
mm.Free;
Image.Free;
end;

end;
 
来自:zywcd, 时间:2006-9-28 9:56:59, ID:3584187
那我怀疑你的delphi本身是不是有问题了。和你的代码没有关系。

===========
呵呵,delphi应该不会有问题,好多机器上都试过了
 
但是你设计期就不能载入图片就很奇怪了。
 
不奇怪,他载入的图片本身是他自己导出来的,格式不完善,对于支持N中格式的图片工具来说,当然不是问题,但对TJpegImage这个单一而严格格式要求的控件就会出错.
 
自己搞定,散分
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
582
import
I
I
回复
0
查看
654
import
I
后退
顶部