C++ MFC picture control控件按比例显示任意图片文件(jpg、bmp等) 您所在的位置:网站首页 1211554908_16440042726421n.jpg C++ MFC picture control控件按比例显示任意图片文件(jpg、bmp等)

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

2024-02-08 02:08| 来源: 网络整理| 查看: 265

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

showpic();函数的实现

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

下面先上代码,附部分注释 代码块 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);//释放指针空间 } 运行效果

竖版的按比例居中显示 这里写图片描述 横版的

总结

编译环境 VS2017 作者现在大二在读,水平有限,之前学过C语言,从零开始学C++到项目结题共用时10天,代码鄙陋,留给自己以后查找用。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有