急求教一个关于图片处理的问题??? ( 积分: 30 )

  • 主题发起人 主题发起人 purchase
  • 开始时间 开始时间
P

purchase

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟急求教一个问题:
我用 DBCtrlGrid1 控件来显示数据库img字段(image类型)的图片,遇到了问题,因为该字段我是保存的JPEG格式的图片,所以控件连接后就会显示说图片格式有错误.但是如果保存的都是BMP格式的图片的话,连接后就可以显示.
请问各位大侠该怎么解决这个问题,很急的,求教!!!!!!!!!
 
小弟急求教一个问题:
我用 DBCtrlGrid1 控件来显示数据库img字段(image类型)的图片,遇到了问题,因为该字段我是保存的JPEG格式的图片,所以控件连接后就会显示说图片格式有错误.但是如果保存的都是BMP格式的图片的话,连接后就可以显示.
请问各位大侠该怎么解决这个问题,很急的,求教!!!!!!!!!
 
大家帮忙啊!!
 
楼上的朋友,请给讲具体一点,谢谢!!!
 
你在 uses 列表中 加入 jpeg 这个 Unit;
 
收到了兄弟,不可以啊
 
用什么数据库,能把数据库发给我吗?xinsilu@163.com
 
兄弟们,发力啊
 
大侠们怎么不发力啊,兄弟哭求了!!
 
你可以用JPEG格式先读出来,然后将其转化为BMP格式。
你是用什么方式读出字段信息的?是流还是? 先把它读到JPEG中,再转换为BMP.
 
如果你是JPG图片是保存是Blob字段中的,可以用以下方式实现
Procedure JpgToBmp(Const PicField:TBlobField; Var Bmp:TBitMap);
var BmpPic:TBitMap;
jpg:TJpegImage;
tpPic:TImage;
tpStream:TMemoryStream;
begin
try
TpStream:=TMemoryStream.Create;
Jpg:=TJpegImage.Create;
tpPic:=tImage.Create(nil);
BmpPic:=TBitmap.Create;
with PicField do
if BlobSize>0 then
SaveToStream(tpStream)
else
tpStream:=Nil;
if tpStream<>Nil then
begin
tpStream.Seek(0,0);
jpg.LoadFromStream(tpStream);
tpPic.Picture.Assign(jpg);
BmpPic.Assign(tpPic.Picture.Graphic);
end
else
begin
NoImage(jpg);
tpPic.Picture.Assign(jpg);
BmpPic.Assign(tpPic.Picture.Graphic);
end;
Bmp:=BmpPic;
Finally
jpg.Free;
tpPic.Free;
tpStream.Free;
end;
end;
得到BMP图片后,就可以在GRID中自画了
 
Procedure NoImage(var jpg:TJpegImage);
Const Str='(No Image)';
var bmp:TBitmap;
x,y:integer;
begin
try
bmp:=TBitmap.Create;
bmp.Width:=60;
bmp.Height:=60;
bmp.Canvas.Font.Size:=8;
bmp.Canvas.Brush.Color:=clWhite;
bmp.Canvas.FillRect(bmp.Canvas.ClipRect);
bmp.Canvas.Font.Color:=clBlack;
bmp.Canvas.Font.Name:='Times New Roman';
x:=(bmp.Width-bmp.Canvas.TextWidth(Str)) div 2;
y:=(bmp.Height-bmp.Canvas.TextHeight(Str)) div 2;
bmp.Canvas.TextOut(x,y,Str);
jpg.Empty;
jpg.Assign(bmp);
finally
bmp.Free;
end;
end;
NoImg的作用就是输出一个没有图片的小图标,如不需要,直接赋Nil就可以了
 
兄弟,我在DBCtrlGrid1 控件上方了一个DBImage1控件,我只要把DBIMAGE1的DATAFIELD指向image类型字段,打开数据集的时候就可以把图片成列的显示出来 ,但是如果数据库里面保存的是JPEG格式的就不可以,BMP格式的就可以的
我就是想把JPEG格式的显示出来,因为BMP的太大了
 
你去DbImage的Draw事件看看,他是怎么实现的?如果能有你讲的方式,你也告诉我。
上面只是将Jpg解压成Bmp后显示出来,解压完毕完成显示后同BMP大小有何相关?
 
levi 讲的很对,这就是JPEG和BMP的区别,BMP是可以直接处理的,而JPEG是不可以的,它一定要转换过来才可以.
 
收到了,如果直接显示--简单,在DBCtrlGrid中就不好做了.
 
其实我的意思就是但数据集控件打开时如:
adoquery1.close;
adoquery1.sql.text := 'select img from test';
adoquery1.open;
里面的JPEG格式的图片都能显示出来,我在DBCtrlGrid1 控件上方了一个DBImage1控件,就是为了让图片全部成列显示出来,大家想想看还有没有别的什么方法来实现,或者别的什么第三方控件?
 
将 Jpg图像用二进制流存入access 的OLE类型字段中。用Image显示
显示:
procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
var
strm:Tadoblobstream;
jpegimage:Tjpegimage;
begin
strm := tadoblobstream.Create(tblobfield(ADOQuery1.fieldbyname('MYIMAGE')),bmread);
try
strm.position :=0;
image1.Picture.Graphic := nil; //清空
if ADOQuery1.fieldbyname('isbmp').asstring ='0' then
begin
jpegimage := tjpegimage.Create ;
try
jpegimage.LoadFromStream(strm);
image1.Picture.Graphic := jpegimage;
finally
jpegimage.Free ;
end;
end;
finally
strm.Free ;
end;
end;
 
对不起,purchase
你说的是图片预览,对吗?
我也不会,学习学习。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部