将内存中的jpg图片直接显示在窗口上,求实现方法

The_Only_Name_2 2010-09-07 06:39:13
如题,
我要实现把内存中的jpg数据显示到对话框上的功能,
在网上找到从磁盘读取jpg文件并显示在对话框上的代码如下:

void CUdp_transport_svrDlg::showPic()
{
IStream *m_pStream;
IPicture *m_pPictrue;
OLE_XSIZE_HIMETRIC m_JPGWidth;
OLE_YSIZE_HIMETRIC m_JPGHeight;
HGLOBAL hMem;
CFile file;
if (!file.Open("a.jpg",CFile::modeReadWrite))
{
MessageBox("open file failed!");
}

DWORD len=file.GetLength();
hMem=GlobalAlloc(GMEM_MOVEABLE,len);
LPVOID pData=NULL;
pData=GlobalLock(hMem);
file.ReadHuge(pData,len);
file.Close();
GlobalUnlock(hMem);
CreateStreamOnHGlobal(hMem,TRUE,&m_pStream);
OleLoadPicture(m_pStream,len,TRUE,IID_IPicture,(LPVOID*)&m_pPictrue);
m_pPictrue->get_Height(&m_JPGHeight);
m_pPictrue->get_Width(&m_JPGWidth);
CRect lpRec;
GetDlgItem(IDC_STATIC1)->GetWindowRect(&lpRec);
ScreenToClient(&lpRec);
m_pPictrue->Render(GetDC()->m_hDC,lpRec.left,lpRec.top,(int)(m_JPGWidth/26.45),(int)(m_JPGHeight/26.45),0,m_JPGHeight,m_JPGWidth,-m_JPGHeight,NULL);
}



但是我现在不想从磁盘读,而是直接从内存读图片数据显示出来,不知道这段代码要怎样改
有人指点说
m_pStream->Write(pDld->recvBuf+8,lenth,&lenthWritten);
试了报错,m_pStream的内容是oxccccccccc,不能写什么的
请高手指点
...全文
674 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 the_only_name_2 的回复:]

要的就是这个答案!多谢向兄
[/Quote]
客气了
碰巧做过
The_Only_Name_2 2010-09-10
  • 打赏
  • 举报
回复
要的就是这个答案!多谢向兄
向立天 2010-09-07
  • 打赏
  • 举报
回复
以下代码就是将内存中的jpg图片显示出来
希望对你有帮助
LRESULT CMonitorDlg::OnRender(WPARAM wParam, LPARAM lParam)
{
DWORD dwLen = m_pComRec->m_nFrameSize;
BYTE* lpFrame = m_pComRec->m_buffFrame;

HGLOBAL hMem = GlobalAlloc(GMEM_FIXED, dwLen);
BYTE* pMem = (BYTE*)GlobalLock(hMem);
memcpy(pMem, lpFrame, dwLen);
IStream* pIStm;
CreateStreamOnHGlobal(hMem, FALSE, &pIStm);

m_picFrame.Load(pIStm);

GlobalUnlock(hMem);
pIStm->Release();

Invalidate();
m_pComRec->Send("go on", 5);

return 1;
}
向立天 2010-09-07
  • 打赏
  • 举报
回复
通过内存文件过渡一下
野男孩 2010-09-07
  • 打赏
  • 举报
回复
内存中的数据。。。。文件中的数据读出来,不就是内存中的数据了


void showpic(BYTE* pMemData, DWORD len)
{
IStream *m_pStream;
IPicture *m_pPictrue;
OLE_XSIZE_HIMETRIC m_JPGWidth;
OLE_YSIZE_HIMETRIC m_JPGHeight;
HGLOBAL hMem;

hMem=GlobalAlloc(GMEM_MOVEABLE,len);
LPVOID pData=NULL;
pData=GlobalLock(hMem);
memcpy(pData, pMemData, len);
GlobalUnlock(hMem);
CreateStreamOnHGlobal(hMem,TRUE,&m_pStream);
OleLoadPicture(m_pStream,len,TRUE,IID_IPicture,(LPVOID*)&m_pPictrue);
m_pPictrue->get_Height(&m_JPGHeight);
m_pPictrue->get_Width(&m_JPGWidth);
CRect lpRec;
GetDlgItem(IDC_STATIC1)->GetWindowRect(&lpRec);
ScreenToClient(&lpRec);
m_pPictrue->Render(GetDC()->m_hDC,lpRec.left,lpRec.top
,(int)(m_JPGWidth/26.45), (int)(m_JPGHeight/26.45)
,0 ,m_JPGHeight, m_JPGWidth,-m_JPGHeight,NULL);
}

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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