求救,高手请进来看看啊

wyy99 2003-04-13 11:47:51
bcb 中用TDBImage控件只能显示数据库中bmp图像格式,怎么样才能显示jepg图像啊

请各位bcb 高手帮忙啊,谢谢了。

想交些编程的朋友,我的QQ:107642122
...全文
26 点赞 收藏 6
写回复
6 条回复
xpyilin 2003年04月14日
图象数据在ORACLE中保存的类型为BLOB ,我用TDBImage 控件直接来显示,结果出现 Stream read error .问我要显示这些图象应该怎么做?

(来自CKER)
关键是JPG类型的图象数据。这种情况你必须先将jpg的blob数据导入内存流,
然后再使用bcb自带的tjpegimage,得到这个流的内容,最后交给bcb显示:
大致步骤如下:
std::auto_ptr<TMemoryStream> stream (new TMemoryStream);
TBlobField* field = dynamic_cast<TBlobField *>(Query->FieldByName("ImageField"));
if (field)
{
field->SaveToStream(stream.get());
stream->Position = 0;
std::auto_ptr<TJPEGImage> jpeg(new TJPEGImage);
jpeg->LoadFromStream(stream.get());
if (jpeg->Height >0 && jpeg->Width >0)
Image->Picture->Bitmap->Assign(jpeg.get());
else
Image->Picture->Assign(NULL);
}
回复 点赞
wyy99 2003年04月14日
tdbimage控件也有tpicture属性,应该也可以显示jpeg图象的,可能是默认bitmap图象,
能不能想办法修改这个默认值啊
望多多指教
谢谢
回复 点赞
xc2927 2003年04月14日
学习,
帮你uP
回复 点赞
bigwhiteshark 2003年04月13日
Q:如何在C++Builder中存取BLOB字段的数据?
A:如果你使用的是BDE的数据访问方式(不论你使用的是BDE的数据源还是ODBC的数据源)
你可以按照下面的代码来存取BLOB字段的数据:
//读
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TBlobStream * pmem=new TBlobStream(pField,bmRead);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->LoadFromStream(pmem);
Image1->Picture->Assign(pBitmap);
delete pBitmap;
delete pmem;
//写
pQuery->Edit();
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TBlobStream * pmem=new TBlobStream(pField,bmWrite);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->Assign(Image1->Picture->Graphic);
pBitmap->SaveToStream(pmem);
delete pBitmap;
delete pmem;
pQuery->Post();
如果你使用的ADO的方式来访问数据库,你可以这样写:
//读
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TADOBlobStream* pmem=new TADOBlobStream (pField,bmRead);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->LoadFromStream(pmem);
Image1->Picture->Assign(pBitmap);
delete pBitmap;
delete pmem;
//写
pQuery->Edit();
TBlobField * pField=(TBlobField *)pQuery->FieldByName("Image");
TADOBlobStream * pmem=new TADOBlobStream (pField,bmWrite);
pmem->Seek(0,soFromBeginning);
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
pBitmap->Assign(Image1->Picture->Graphic);
pBitmap->SaveToStream(pmem);
delete pBitmap;
delete pmem;
pQuery->Post();
回复 点赞
wyy99 2003年04月13日
能不能用TDBImage控件显示啊

还有http://expert.csdn.net/Expert/TopicView2.asp?id=849224&datebasetype=now进不了啊,要登录的
回复 点赞
xpyilin 2003年04月13日
取出来用Image显示,参考:
http://expert.csdn.net/Expert/TopicView2.asp?id=849224&datebasetype=now
回复 点赞
发动态
发帖子
数据库及相关技术
创建于2007-08-02

707

社区成员

1.8w+

社区内容

C++ Builder 数据库及相关技术
社区公告
暂无公告