请问各位高手们TImage怎么样才能显示数据库中的Blob大型二进制数据呀,也就是显示图片啊!!(50分)

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

fastupcph

Unregistered / Unconfirmed
GUEST, unregistred user!
最近我发现TDBImage控件一点不好用,好像显示不了JPG的图片,但如果用TImage控件,又找不到数据源,试了几种方法都读不出Blob的数据,不知大家能不能帮忙帮忙呀
 
(dataset.fieldbyname('') as TBlobField).savetofile('myjpg.jpg');
image1.picture.loadfromfile('myjpg.jpg');
这里的是jpg格式的,如果是bmp则将扩展名改了就可以了
 
See this code:
var
M: TBlobStream;
JPG: TJPEGImage;
begin
...
M := TBlobStream.Create(TBlobField(FieldByName('XX')), bmRead);
JPG := TJPEGImage.Create;
JPG.LoadFromStream(M);
Image1.Picture.Assign(JPG);
 
同意樓上的,但是補充一點
Jpg用完要釋放
JPg.free;
 
我的代码是:
implementation
uses ADODB,Jpeg;
var
tmpBlobStream:TBlobStream;
tmpJpeg:TJpegImage;
begin
tmpBlobStream:=TBlobStream.Create(TBlobField(CardQ.FieldByName('CDJPG')),bmRead);
tmpJpeg:=TJpegImage.Create;
tmpJpeg.LoadFromStream(tmpBlobStream);
imgCard.Picture.Assign(tmpJpeg);
imgCard.refresh;
但出错说: Jpeg error #41.呀
 
Are you sure date of field 'CDJPG' is correct??? Is it a JPEG graphic???
 
jpeg文件本来就有些区别的,比如在photoshop里保存为jpeg和画笔保存的jpeg就不同,你先把这个文件用画笔打开,再另存为jpeg的试试看。
 
'CDJPG'这个字段是我在数据库中的IMAGE类型字段啊
 
JPEG另存还是不行啊
 
Are you sure 'CDJPG' data is orginal JPEG data???
 
出错的原因你库里面保存的不是jpg格式的,可以读出来然后转换格式
 
一个利用TBlobStream在数据库中保存BMP和JPG图片的例子,可同时支持这两种格式的图片,并且涉及到利用DBGrid的自绘事件在DBGrid中绘制图片的技巧(使用了Delphi自带的DBDEMOS数据库中的Animals.dbf数据表,SQL数据和本地DBF数据库的操作是一样的)。
http://www.aidelphi.com/6to23/Docu/BlobStream.zip
这个要不要看一下??
还有一个资料
朋友发现用TDBImage不能显示数据库Blob字段中保存的Jpeg图像,显示BMP图像没有问题,我也没有办法,只有自己用TImage来显示,需要写些代码,由TJpegImage支持。这里下载在Oracle等数据库中存取BMP和Jpeg图像的演示程序,有Readme
http://www.8421.org/download/delphi_jpeg.zip
 
我试过在'CDJPG'里保存 app2001发给我的JPG1 或JPG2 ,结果还是一样啊,提示说:Jpeg error #41.呀 !!
好像是这句出的错: imgCard.Picture.Assign(tmpJpeg);
但不知为什么啊,高手们再帮帮忙呀,先谢啦!![?]
 
我保存JPG时用这句不知对不对啊!
if opdCard.Execute then
begin
if Trim(opdCard.Files[0])<>'' then
begin
imgCard.Picture.LoadFromFile(opdCard.Files[0]);
imgCard.Refresh;
CardQ.FieldByName('CDJPG').Assign(imgCard.Picture);
end;
end;
CardQ.post;
 
应该可行吧:
if opdCard.Execute then
begin
if Trim(opdCard.Files[0])<>'' then
begin
imgCard.Picture.LoadFromFile(opdCard.Files[0]);
imgCard.Refresh;
//这之前是不是需要edit一下呢???
CardQ.Edit;
CardQ.FieldByName('CDJPG').Assign(imgCard.Picture);
end;
end;
CardQ.post;
 
对呀,我在最前面有个APPEND的
CardQ.append; //这里
if opdCard.Execute then
begin
if Trim(opdCard.Files[0])<>'' then
begin
imgCard.Picture.LoadFromFile(opdCard.Files[0]);

好像是这句出的错: imgCard.Picture.Assign(tmpJpeg); // Jpeg error #41
是不是JPEG文件格式的问题??高手们再帮帮忙呀,先谢啦!![?] [?]
 
CardQ.FieldByName('CDJPG').Assign(imgCard.Picture);
--------------------------------------------------
Incorrect, you can't save image data to field like this!!!

M:=TBlobStream.Create(TBlobField(CardQ.FieldByName('CDJPG')),bmWrite);
try
imgCard.Picture.Graphic.SaveToStream(M);
M.Seek(0,0);
CardQ.post;
finally
M.Free;
end;
 
问题解决了,真心谢谢大家[:D]!!
 
后退
顶部