## C++ MFC picture control控件按比例显示任意图片文件(jpg、bmp等)

2 篇文章 0 订阅

C++ MFC picture control控件按比例显示任意图片文件(jpg、bmp等)

原创这大概是个bug 最后发布于2018-09-15 23:15:10 阅读数 5572 收藏
展开
前段时间做大一专业实训,用MFC做一个图片查看类程序,对于从来没有学过C++的我们来说显示一张图片就是一件很难的事情了,作为小组里唯一一个MFC设计者,我从网上有很多关于MFC图片控件显示的文章,但大多数文章描述的方法不能满足我们的需求。我们需要显示一个文件夹中任意一张图片,实现前后翻页,按比例显示,并且实现图片旋转。现在介绍如何在picture control中按比例显示一张任意格式的图片。

showpic();函数的实现
分为四个步骤
1.用image类创建一个图片对象,获取其宽和高;
2.获取控件句柄,从而获得控件客户区的相关参数;
3.计算,算出图片应该按怎样的比例显示出来;
4.获取控件的DC,将图片显示出来;

下面先上代码,附部分注释
1
代码块
void ShowPic()//形参可以为所给的图片对象的指针,这里为了通用性省去了形参
{
float cx, cy, dx, dy, k, t;//跟控件的宽和高以及图片宽和高有关的参数
CRect rect;//用于获取图片控件的宽和高
CImage q;//为cimage图片类创建一个对象
q.Load(“你想加载的图片路径”);//构造函数的形参是所加载图片的路径
cx = q.GetWidth();
cy = q.GetHeight();//获取图片的宽 高
k = cy / cx;//获得图片的宽高比

CWnd *pWnd = NULL;
pWnd = GetDlgItem(你定义的图片控件的ID);//获取控件句柄
pWnd->GetClientRect(&rect);//获取Picture Control控件的客户区
dx = rect.Width();
dy = rect.Height();//获得控件的宽高比
t = dy / dx;//获得控件的宽高比
if (k >= t)
{

    rect.right = floor(rect.bottom / k);
    rect.left = (dx - rect.right) / 2;
    rect.right = floor(rect.bottom / k) + (dx - rect.right) / 2;
}
else
{
    rect.bottom = floor(k*rect.right);
    rect.top = (dy - rect.bottom) / 2;
    rect.bottom = floor(k*rect.right) + (dy - rect.bottom) / 2;
}
//相关的计算为了让图片在绘图区居中按比例显示,原理很好懂,如果图片很宽但是不高,就上下留有空白区;如果图片很高而不宽就左右留有空白区,并且保持两边空白区一样大

CDC *pDc = NULL;
pDc = pWnd->GetDC();//获取picture control的DC,这是什么玩意我也不知道,百度就行
int ModeOld = SetStretchBltMode(pDc->m_hDC, STRETCH_HALFTONE);//设置指定设备环境中的位图拉伸模式

GetDlgItem(Pic)->ShowWindow(FALSE);
GetDlgItem(Pic)->ShowWindow(TRUE);
q.StretchBlt(pDc->m_hDC, rect, SRCCOPY);//显示函数
SetStretchBltMode(pDc->m_hDC, ModeOld);
ReleaseDC(pDc);//释放指针空间

}
————————————————
版权声明:本文为CSDN博主「这大概是个bug」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sdpyly/article/details/82717587

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值