一个很急很机的问题,在线等待,关于图片的提取和显示的 1,我想在access数据库存储图片,用那种方式好?2,我程序连接数据库选择的时候,怎么做是不是其他数据的select方式一样,还有程序提取出来以后 我怎么存储,因为每一条记录对应一张图片,我怎么在对话框中显示 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、将图片转换成二进制,保存到ACCESS中的TEXT类型字段中。2、将ACCESS中的二进制读出来,再转换成图型文件 。 在《Delphi存取图像完整解决方案》一文中,笔者提供了一种DELPHI存取JPEG、BMP图像到数据库的解决方案,虽然它适用于ACCESS和SQL数据库,但它并不适用于所有数据库(比如PARADOX数据库中的GRAPHIC图像字段就不能采用该方法存取图像数据),下文将介绍DELPHI利用ASSIGN方法存取JPEG、BMP图像到数据库的另一解决方案来进行补充完善。演示数据库结构和窗口界面设计同前文,不再重述,将单元的相应程序代码作如下更换: 1. 图像数据的选择及保存procedure Tform1.selectimageClick(Sender: TObject); //选择图像beginif openpicturedialog1.Execute thenimage1.Picture.LoadFromFile(openpicturedialog1.FileName );end;procedure Tform1.savetodbClick(Sender: TObject); //保存图像到数据库varext:string;beginif image1.picture.Graphic <> nil then //避免image1中无图像保存出错beginadotable1.Edit ;adotable1.FieldByName('myimage').Assign(image1.Picture.Graphic);//以下记录保存到数据库的图像格式ext:=extractfileext(openpicturedialog1.FileName ); //取出文件扩展名if uppercase(ext) = '.BMP' THENadotable1.FieldByName('isbmp').VALUE := 1 //BMP型图像数据ELSE IF (UPPERCASE(EXT) = '.JPEG') OR (UPPERCASE(EXT) = '.JPG') THENadotable1.FieldByName('isbmp').VALUE := 0; //JPEG型图像数据ADOTABLE1.Post ;end;end; 2. 图像数据的读取及显示procedure Tform1.ADOTable1AfterScroll(DataSet: TDataSet); //ADOTable1的AfterScroll事件方法程序 var jpegimage:tjpegimage; begin image1.Picture.Graphic :=nil; //下边BMP、JPEG两种图像数据必需分别处理 if adotable1.fieldbyname('isbmp').Asstring = '1' then //BMP型图像数据 image1.Picture.bitmap.Assign(adotable1.fieldbyname('myimage')) //上边语句中的bitmap不能为graphic,否则会出错 else if adotable1.fieldbyname('isbmp').asstring = '0' then //JPEG型图像数据 begin //begin2 jpegimage := tjpegimage.Create ; //通过jpegimage将图像显示在image1,否则会出错 try jpegimage.Assign(adotable1.fieldbyname('myimage')); image1.Picture.Graphic :=jpegimage; finally jpegimage.Free ; end; //end try end; //end begin2end; 注:别忘了在单元文件接口部分的uses语句中添入JPEG单元引用。 以上程序代码在DELPHI6.0+SQL(或ACCESS或PARADOX)数据库下运行通过。 通常采用的方法就是用Stream把图像存到数据库的Image字段。 我用D7+Videocap控件开发程序对摄像头进行操作的问题,各位大侠帮帮忙 为什么会出现此类问题? 各位高手帮帮忙. 自定义函数内部声明变量的内存释放问题 急,求高手指点 ADO不能用于连接sqlserver6.5. 在DBGRID选择一行时,该行呈兰色。 delphi如何实现比较? 300分求进销存、酒店管理等代码, [email protected] 为何申请亿唐个人主页不能成功? 如何在程序中得到一网页中的所有URL,谁有原码或相关控件 编程序插件,报了一天的错!! 有没有可能。。。
2、将ACCESS中的二进制读出来,再转换成图型文件 。
begin
if openpicturedialog1.Execute then
image1.Picture.LoadFromFile(openpicturedialog1.FileName );
end;
procedure Tform1.savetodbClick(Sender: TObject); //保存图像到数据库
var
ext:string;
begin
if image1.picture.Graphic <> nil then //避免image1中无图像保存出错
begin
adotable1.Edit ;
adotable1.FieldByName('myimage').Assign(image1.Picture.Graphic);
//以下记录保存到数据库的图像格式
ext:=extractfileext(openpicturedialog1.FileName ); //取出文件扩展名
if uppercase(ext) = '.BMP' THEN
adotable1.FieldByName('isbmp').VALUE := 1 //BMP型图像数据
ELSE IF (UPPERCASE(EXT) = '.JPEG') OR (UPPERCASE(EXT) = '.JPG') THEN
adotable1.FieldByName('isbmp').VALUE := 0; //JPEG型图像数据
ADOTABLE1.Post ;
end;
end; 2. 图像数据的读取及显示procedure Tform1.ADOTable1AfterScroll(DataSet: TDataSet); //ADOTable1的AfterScroll事件方法程序
var
jpegimage:tjpegimage;
begin
image1.Picture.Graphic :=nil;
//下边BMP、JPEG两种图像数据必需分别处理
if adotable1.fieldbyname('isbmp').Asstring = '1' then //BMP型图像数据
image1.Picture.bitmap.Assign(adotable1.fieldbyname('myimage'))
//上边语句中的bitmap不能为graphic,否则会出错
else if adotable1.fieldbyname('isbmp').asstring = '0' then //JPEG型图像数据
begin //begin2
jpegimage := tjpegimage.Create ; //通过jpegimage将图像显示在image1,否则会出错
try
jpegimage.Assign(adotable1.fieldbyname('myimage'));
image1.Picture.Graphic :=jpegimage;
finally
jpegimage.Free ;
end; //end try
end; //end begin2
end; 注:别忘了在单元文件接口部分的uses语句中添入JPEG单元引用。 以上程序代码在DELPHI6.0+SQL(或ACCESS或PARADOX)数据库下运行通过。