如何利用ipicture render在指定图像框内显示相同大小的jpg图片

风之刃3 2014-04-24 09:35:22
CString m_filename =strContentpicture;
m_dir.SetWindowText(m_filename);
CFile m_file(m_filename,CFile::modeRead );
DWORD m_filelen = m_file.GetLength(); //获取文件长度
HGLOBAL m_hglobal = GlobalAlloc(GMEM_MOVEABLE,m_filelen); //在堆上分配指定大小空间
LPVOID pvdata = NULL; //锁定堆空间,获取指向堆空间的指针
pvdata = GlobalLock(m_hglobal);//将文件数据读区到堆中
m_file.ReadHuge(pvdata,m_filelen);
IStream* m_stream;
GlobalUnlock(m_hglobal);
CreateStreamOnHGlobal(m_hglobal,TRUE,&m_stream);//在堆中创建流对象
OleLoadPicture(m_stream,m_filelen,TRUE,IID_IPicture,(LPVOID*)&m_picture); //利用流加载图像
m_picture->get_Width(&m_width);
m_picture->get_Height(&m_height);
CDC* dc = GetDC();
m_IsShow = TRUE;
CRect rect;
GetClientRect(rect);
SetScrollRange(SB_VERT,0,(int)(m_height/26.45)-rect.Height());
SetScrollRange(SB_HORZ,0,(int)(m_width/26.45)-rect.Width());

CRect lpRec;
GetDlgItem(IDC_STATIC1)->GetWindowRect(&lpRec);
//ScreenToClient(&lpRec);

m_picture->Render(*dc,50,50,lpRec.Width(),lpRec.Height(),0,m_height,m_width,-m_height,NULL);

ReleaseDC(dc);

//这样只能把图片显示的和图像框一样大,强行规定了显示位置的左上角坐标,但是,一旦拖动对话框到屏幕外,对话框上的图 //片就会刷新,而且是原图像大小,怎么才能在图像框内刷新这张图啊??
...全文
232 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
风之刃3 2014-04-24
  • 打赏
  • 举报
回复
是用OnMove实现吗?能给出具体代码不?
风之刃3 2014-04-24
  • 打赏
  • 举报
回复
引用 3 楼 dingxz105090 的回复:
看5楼的代码
我用m_picture->Release();只要一把对话框移动到屏幕外边就会出错,怎么才能释放资源,使得对话框刷新时不会在对话框上出来jpg的原图?如果能在图像框内重绘出jpg图片就更好了
xiaohuh421 2014-04-24
  • 打赏
  • 举报
回复
响应重绘事件, 再绘制一遍
凌乱哥 2014-04-24
  • 打赏
  • 举报
回复

19,469

社区成员

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

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