VC++ 完整地从文件中读取位图到控件

TUSEN 2008-08-03 10:05:26
各位高手大家好:
我在网上看到了一个读取位图的例子
代码如下:
hwnd = GetDlgItem(IDC_BMP_AREA);//IDC_BMP_ARE是对话框上的static控件ID hwnd是Cwnd指针
hDesDC = hwnd->GetDC()->m_hDC;//得到位图区域的DC句柄
hSrcDC = CreateCompatibleDC(hDesDC);//得到与位图区域的DC句柄相关的内存DC句柄
hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),filePath,\
IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);//返回图片句柄
//0.0 uses the actual resource width.

GetObject(hBitmap, sizeof BITMAP, &bm);//填充位图到BITMAP对象bm中
SelectObject(hSrcDC, hBitmap);//把位图句柄选择到内存DC中
hwnd->GetClientRect(&rect);//得到窗口客户区(绘图区域)的客户区坐标//0,0,w,h
::SetStretchBltMode(hDesDC,COLORONCOLOR);
::StretchBlt(hDesDC, rect.left, rect.top, rect.right, \
rect.bottom, hSrcDC, 0, 0, bm.bmWidth, bm.bmHeight,SRCCOPY);
结果能运行 只是我生成的位图数据不是和static控件的宽高等比例的
也就是说位图存在着压缩或者损失
我想请教下大家:
等比例的显示位图的是什么函数?也就是把位图等比例的缩放到static控件中,无论这样以来static控件里面有无空白区域..
...全文
118 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
TUSEN 2008-08-07
  • 打赏
  • 举报
回复
谢谢 我的问题已经解决了 谢谢
sun_hw 2008-08-04
  • 打赏
  • 举报
回复
上面的代码Cstatic有留白,如果不留白的话,判断逻辑相反,自己写吧!
这样图片会被剪切掉
//提示最好找到图片的中心点,这样可以进行四周剪切。
sun_hw 2008-08-04
  • 打赏
  • 举报
回复
::StretchBlt(hDesDC, rect.left, rect.top, rect.right, \
rect.bottom, hSrcDC, 0, 0, bm.bmWidth, bm.bmHeight,SRCCOPY);
=>
CRect rtNew;
rtNew.left= rect.left;
rtNew.top = rect.top;

radio = bm.bmWidth / bm.bmHeight;
if(rect.right -rect.left < ((rect.bottom - rect.top) * radio))
{
rtNew.right = rect.right;
rtNew.bottom = (rect.right -rect.left)/radio +rect.top;
}
else
{
rtNew.bottom = rect.bottom;
rtNew.right = (rect.bottom - rect.top)* radio + left;
}

//请添加确保/运算合法的代码。
::StretchBlt(hDesDC, rtNew.left, rtNew.top, rtNew.right, \
rtNew.bottom, hSrcDC, 0, 0, bm.bmWidth, bm.bmHeight,SRCCOPY);
hugestar007 2008-08-04
  • 打赏
  • 举报
回复
SetDIBitsToDevice是一比一的显示,StretchDIBits是可以缩放的,这个要看你设控件显示坐标的位置,或者对原始图像进行缩放后再显示.

19,472

社区成员

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

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