怎么用左dbimage无法显示ACCESS97数据库中的BMP图片?

netlemon 2000-01-09 12:29:00
我在access 数据库中有一字段是OLE对象,我插入了BMP位图,可在delphi 4 中却无法用dbimage控件显示,提示是“bitmap is not vilid”位图不是有校的,请问怎样才能解决,谢谢。
...全文
200 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
光明山人 2000-01-25
  • 打赏
  • 举报
回复
好象TGraphicField及TDBImage仅对Paradox有效(也许dBase for Window也行,没玩过),它是针对Paradox的Graphic类型字段。查看VCL的源代码,在TBlobField.LoadFromBitmap及SaveToBitmap中还加了一个头。

如果是用的别的数据库存放图片,你应该自己处理图片的存取,显示。我用Sybase的Image类型字段存过。但只能用TImage控件了。大体实现是这样:
读入时:

aStream := TBlobStream.Create(TBlobField(theBMPField), bmRead);
Image.Picture.Graphic.LoadFromStream( aStream );
aStream.Free;

写时:
aStream := TBlobStream.Create(TBlobField(theBMPField), bmWrite);
Image.Picture.Graphic.SaveToStream( aStream );
aStream.Free;

正式用时,可能会需要测试空值等情况、加上try...finally等。

如果你仅是存图片的话,这个应该能满足你的要求。
如果你要用Ole的话,那得另想办法了。
-------
阿贵
  跳出三界外
  不在五行中
-------
929 2000-01-24
  • 打赏
  • 举报
回复
在ACCESS的OLE字段中存放图片,则图片不再是完全的图片格式。在99年上半年的一期《电子与电脑》中有一个有关在ASP中显示ACCESS数据库中OLE图片的解答。请参考一下。
对不起,具体哪一期,我忘了!
Venne 2000-01-14
  • 打赏
  • 举报
回复
lightTop说得对.我试过,在ACCESS数据库中插入的OLE,它被记录成一个包,随着图片大小的不同,这个头大小似乎也不一样.我不知道应该从什么位置读取它.
利用容器我不知LIGHTTOP试过没有,我使用OLE容器来读这个流,也不是OLE格式的流,它应该是一个PACKAGE.
lighttop 2000-01-14
  • 打赏
  • 举报
回复
既然你在ACCESS数据库中的字段插入的是BMP位图的OLE 对象,那么这个字段的内容就不光是BMP图象, 还有OLE服务器的信息.
如果你要用图形控件显示字段中存放的位图,首先需要通过"流"的方式把字段内容读到一个内存流(MemoryStream)中然后把其中头部的Ole服务器信息剥除,只除下BMP位图信息,然后将位图信息Assign到一个图形控件上(不需要是数据感应的图形控件)。
还有一个方法, 就是通过容器来显示位图, 容器直接从字段的流中读取数据, 然后自动启动OLE服务器(此为画板程序), 通过OLE服务器来显示编辑位图。

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧