VC从数据库里读出的image是字节流,怎么在对话框上恢复成图片呢? VC从数据库里读出的image是字节流,怎么在对话框上恢复成图片样子呢?非常感谢!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果是BMP可以先整个读到内存里,然后取出文件头,获取图片信息,然后根据这些信息取出真正的图片数据,显示出来,你的问题主要是解析图片格式的问题。 你可以参考一下这个例子:http://hi.baidu.com/%C5%E1%F6%CE0227/blog/item/f34fd13c8e2224c09e3d6258.html其实还有一个简单的办法,就是你把图片读出来写成文件,然后用LoadImage载入显示就可以了。 我能写成文件,然后LoadImage,能写点代码吗?我刚学,还多常用函数还没见过。。 #include <atlbase.h>#include <afxpriv2.h>void CIpicDlg::ShowPic(){ CComQIPtr<IPicture>spIPicture; HRESULT m_hr; //unsigned char* pPictureData; //UINT nPictureSize; CRect rc; m_wndPic1.GetClientRect(&rc); CDC* pDC = m_wndPic1.GetDC(); if(m_pPictureData) { CMemFile memfile; memfile.Attach(m_pPictureData,m_nPictureSize); CArchive ar(&memfile, CArchive::load | CArchive::bNoFlushOnDelete); CArchiveStream arcstream(&ar); HRESULT hr = OleLoadPicture((IStream*)&arcstream, 0, FALSE, IID_IPicture, (void**)&spIPicture); ASSERT(SUCCEEDED(hr) && spIPicture); OLE_XSIZE_HIMETRIC hmWidth = 0; OLE_YSIZE_HIMETRIC hmHeight = 0; m_hr = spIPicture->get_Width(&hmWidth); ASSERT(SUCCEEDED(m_hr)); m_hr = spIPicture->get_Height(&hmHeight); ASSERT(SUCCEEDED(m_hr)); spIPicture->Render(pDC->m_hDC, rc.left, rc.top, rc.Width(), rc.Height(), 0, hmHeight, hmWidth, -hmHeight, NULL); CSize sz(hmWidth,hmHeight); pDC->HIMETRICtoDP(&sz); } if (spIPicture) { spIPicture.Release(); }}用的是微软的Ipicture的Com组件,代码测试过没问题,m_pPictureData是图形数据在内存中的指针,m_nPictureSiz是图形数据大小,sz可以得到图片大小,如果你需要的话。我测试的是jpg文件,代码仅供参考。 取得IE浏览器页面的滚动条位置(奇怪的现象) 请教:窗口静态切分问题 基础的内存类型分配问题~求助 这也有错误吗? 关于线程终止的问题(在线等待) 如何让单文档工程在运行的时候自动为最大化呢(在线等待马上给分) --- 关于状态条的问题 com问题请教 怎么我的对话框会变成这种样式? 请帮帮忙。 诚请各位高手的指点(急用 )利用MFC制作铜自动包装生产线电子控制管理系统的界面及二级界面的连接 文本框中识别功能键
其实还有一个简单的办法,就是你把图片读出来写成文件,然后用LoadImage载入显示就可以了。
#include <atlbase.h>
#include <afxpriv2.h>void CIpicDlg::ShowPic()
{
CComQIPtr<IPicture>spIPicture;
HRESULT m_hr;
//unsigned char* pPictureData;
//UINT nPictureSize;
CRect rc;
m_wndPic1.GetClientRect(&rc);
CDC* pDC = m_wndPic1.GetDC();
if(m_pPictureData)
{
CMemFile memfile;
memfile.Attach(m_pPictureData,m_nPictureSize);
CArchive ar(&memfile, CArchive::load | CArchive::bNoFlushOnDelete);
CArchiveStream arcstream(&ar);
HRESULT hr = OleLoadPicture((IStream*)&arcstream, 0, FALSE,
IID_IPicture, (void**)&spIPicture);
ASSERT(SUCCEEDED(hr) && spIPicture);
OLE_XSIZE_HIMETRIC hmWidth = 0;
OLE_YSIZE_HIMETRIC hmHeight = 0;
m_hr = spIPicture->get_Width(&hmWidth);
ASSERT(SUCCEEDED(m_hr));
m_hr = spIPicture->get_Height(&hmHeight);
ASSERT(SUCCEEDED(m_hr));
spIPicture->Render(pDC->m_hDC, rc.left, rc.top, rc.Width(), rc.Height(),
0, hmHeight, hmWidth, -hmHeight, NULL);
CSize sz(hmWidth,hmHeight);
pDC->HIMETRICtoDP(&sz);
}
if (spIPicture)
{
spIPicture.Release();
}
}用的是微软的Ipicture的Com组件,代码测试过没问题,m_pPictureData是图形数据在内存中的指针,m_nPictureSiz是图形数据大小,sz可以得到图片大小,如果你需要的话。
我测试的是jpg文件,代码仅供参考。