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控件里面有无空白区域..
...全文
89 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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是可以缩放的,这个要看你设控件显示坐标的位置,或者对原始图像进行缩放后再显示.
回复
相关推荐
发帖
图形处理/算法
创建于2007-09-28

1.9w+

社区成员

VC/MFC 图形处理/算法
申请成为版主
帖子事件
创建了帖子
2008-08-03 10:05
社区公告
暂无公告