我用如下的代码保存图片,这个图片是通过两个方式得到的,一个是选择图片,一个是通过扫描仪得到的图片,代码如下:
try
if id_no=application.MessageBox('您确实要保存吗??','确认信息',mb_YesNo) then exit;
ImageHolder.Picture.Graphic.SaveToStream(strm);
//动态创建Query1\Query2的方法
dzda_image_query := TADOQuery.Create(nil);
dzda_image_query.Connection := dm.ADOConnection1;
dzda_image_query.Close;
dzda_image_query.SQL.Clear;
str:='select * from dzda_table where dzda_id='''+dzda_tree_query.FieldByName('dzda_id').AsString+''' ';
dzda_image_query.SQL.Add(str);
dzda_image_query.Open;
dzda_image_query.Edit ;
strm.Position :=0;
TBlobField(dzda_image_query.FieldByName('dzda_xl_image')).LoadFromStream(strm);
//(OpenPictureDialog1.FileName);
//以下记录保存到数据库的图像格式
if uppercase(ext) = '.BMP' then
dzda_image_query.FieldByName('dzda_xl_imlx').Value := 1 //BMP型图像数据
else
if (uppercase(ext) = '.JPG') OR ( uppercase(ext) = '.JPEG') or (uppercase(ext)='')Then
dzda_image_query.FieldByName('dzda_xl_imlx').Value := 0; //JPEG型图像数据
dzda_image_query.Post ;
finally
strm.Free ; //笔者发现如strm采用tblobstream类,程序运行到该语句会出现问题
end;以上代码,是保存图片,下面的是读出图片:
strm := tadoblobstream.Create(tblobfield(dzda_image_query.fieldbyname('dzda_xl_image')),bmread);
//读取数据库的图片纪录======================================================================================
try //try1
strm.position :=0;
ImageHolder.Picture.Graphic := nil; //清除图像
// BMP、JPEG两种图像数据必需分别处理
if dzda_image_query.fieldbyname('dzda_xl_imlx').asstring ='1' then //BMP型图像数据
begin //begin11
bitmap := tbitmap.Create ;
try //try11
bitmap.LoadFromStream(strm);
ImageHolder.Picture.Graphic := bitmap;
finally
bitmap.Free;
end; //end try11
end //end begin11
else
if dzda_image_query.fieldbyname('dzda_xl_imlx').asstring ='0' then //JPEG型图像数据
begin //begin12
jpegimage := tjpegimage.Create ;
try //try12
strm.position :=0;
jpegimage.LoadFromStream(strm);
ImageHolder.Picture.Assign(jpegimage);
//ImageHolder.Picture.Graphic := ;
finally
jpegimage.Free ;
end; //end try12
//=============================================================================================================
end; //end begin12
finally
strm.Free ;
end; //end try1可是读取的时候出现如下问题jpeg error #53,出现这个问题是用扫描仪,保存后,再读取出错的,而用直接选择的图片的方法,读取却没有问题,这是什么原因呢
try
if id_no=application.MessageBox('您确实要保存吗??','确认信息',mb_YesNo) then exit;
ImageHolder.Picture.Graphic.SaveToStream(strm);
//动态创建Query1\Query2的方法
dzda_image_query := TADOQuery.Create(nil);
dzda_image_query.Connection := dm.ADOConnection1;
dzda_image_query.Close;
dzda_image_query.SQL.Clear;
str:='select * from dzda_table where dzda_id='''+dzda_tree_query.FieldByName('dzda_id').AsString+''' ';
dzda_image_query.SQL.Add(str);
dzda_image_query.Open;
dzda_image_query.Edit ;
strm.Position :=0;
TBlobField(dzda_image_query.FieldByName('dzda_xl_image')).LoadFromStream(strm);
//(OpenPictureDialog1.FileName);
//以下记录保存到数据库的图像格式
if uppercase(ext) = '.BMP' then
dzda_image_query.FieldByName('dzda_xl_imlx').Value := 1 //BMP型图像数据
else
if (uppercase(ext) = '.JPG') OR ( uppercase(ext) = '.JPEG') or (uppercase(ext)='')Then
dzda_image_query.FieldByName('dzda_xl_imlx').Value := 0; //JPEG型图像数据
dzda_image_query.Post ;
finally
strm.Free ; //笔者发现如strm采用tblobstream类,程序运行到该语句会出现问题
end;以上代码,是保存图片,下面的是读出图片:
strm := tadoblobstream.Create(tblobfield(dzda_image_query.fieldbyname('dzda_xl_image')),bmread);
//读取数据库的图片纪录======================================================================================
try //try1
strm.position :=0;
ImageHolder.Picture.Graphic := nil; //清除图像
// BMP、JPEG两种图像数据必需分别处理
if dzda_image_query.fieldbyname('dzda_xl_imlx').asstring ='1' then //BMP型图像数据
begin //begin11
bitmap := tbitmap.Create ;
try //try11
bitmap.LoadFromStream(strm);
ImageHolder.Picture.Graphic := bitmap;
finally
bitmap.Free;
end; //end try11
end //end begin11
else
if dzda_image_query.fieldbyname('dzda_xl_imlx').asstring ='0' then //JPEG型图像数据
begin //begin12
jpegimage := tjpegimage.Create ;
try //try12
strm.position :=0;
jpegimage.LoadFromStream(strm);
ImageHolder.Picture.Assign(jpegimage);
//ImageHolder.Picture.Graphic := ;
finally
jpegimage.Free ;
end; //end try12
//=============================================================================================================
end; //end begin12
finally
strm.Free ;
end; //end try1可是读取的时候出现如下问题jpeg error #53,出现这个问题是用扫描仪,保存后,再读取出错的,而用直接选择的图片的方法,读取却没有问题,这是什么原因呢
解决方案 »
- 高分跪求InstallShield Express3.5中文包
- 把exe文件改成BMP文件,然后配合你机器里的DEBUG再来还原成EXE
- dephi7的Qreport 怎么没有显示当前日期的控件,怎么设置?
- 一个复杂的sql语句:
- fr2.5报表为何不能预览?
- 编写DLL时出一点问题,帮忙看看..
- 三层结构中的参数传递
- 我的win2000server IIS中以前可是好好的,现在为什么不能运行ISAPI的.DLL了?
- 请问XP下已经开发的软件,用在WIN7要更改哪些?
- 如何判断程序本身已经被启动了?
- 谁帮我啊?
- 求教:TDataSet.AfterScroll事件和TDataSource.OnDataChange事件的区别?
jpg和bmp的,所以不能直接读取tif格式的文件,问题是找到了,可是如何存取tif 格式的图片,然后再读取呢