MFC 关于MFC中CImage的简单使用
首先要将#include <atlimage.h>加进来,开始时我加到stdafx.h中,但一直提示windows.h被重复引入的问题,后将其加在别的头文件中,就可以了.. --!
一、图片的载入
如果需要在界面上显示的是已经存在的图片,那么需要将待显示的图片载入至CImage对象之中,CImage提供了四个载入函数:
HRESULT Load(LPCTSTR pszFileName) throw( );
HRESULT Load(IStream* pStream) throw();
void LoadFromResource(HINSTANCE hInstance, LPCTSTR pszResourceName) throw( );
void LoadFromResource(HINSTANCE hInstance, UINT nIDResource) throw( );
如果需要显示的图片在程序运行时需要更换则通常使用第一个函数Load(LPCTSTR pszFileName)载入图片,参数pszFileName指定要载入的图片文件;如果需要显示的图片是固定不变的,则通常使用第三个LoadFromResource(HINSTANCE hInstance, LPCTSTR pszResourceName)或第四个函数LoadFromResource(HINSTANCE hInstance, UINT nIDResource)载入图片,这两个函数是从资源中取得图片信息,每一个参数是包含有待载入图片的模块实例句柄,第二个参数是资源的ID或名称。
LPCTSTR类型可以理解为 const char*
但是我在使用时需要加上 (LPCTSTR)"XX.jpg"
以下代码分别通过Load和LoadFromResource载入了图片:
CImage m_image1; // 实际代码中,被声明成了类成员
CImage m_image2; // 实际代码中,被声明成了类成员
m_image1.Load("G:\\xxx.jpg");
m_image2.LoadFromResource(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1));
在实际中,第一种方法会出现无法载入图片的情况,目前我还不太清楚原因,希望知道的网友指教
二、图片的显示
将图片载入CImage对象的目的是将其在界面之中显示出来,显示图像用到的核心函数是Draw,Draw提供了6个重载函数,通过参数名称,很容易了解参数的含义,其原型如下:
BOOL Draw(HDC hDestDC,int xDest,int yDest,int nDestWidth,int nDestHeight,
int xSrc,int ySrc, int nSrcWidth,int nSrcHeight ) const throw( );
BOOL Draw(HDC hDestDC,const RECT& rectDest,const RECT& rectSrc) const throw( );
BOOL Draw(HDC hDestDC,int xDest,int yDest ) const throw( );
BOOL Draw(HDC hDestDC,const POINT& pointDest) const throw( );
BOOL Draw(HDC hDestDC,int xDest,int yDest,int nDestWidth,int nDestHeight) const throw( );
BOOL Draw(HDC hDestDC,const RECT& rectDest) const throw( );
如果要以控件的大小来显示图片,可以通过以下代码实现:
if(m_image2.IsNull()) //判断有无图像
return;
// 取得客户区尺寸
CRect zcRect;
GetDlgItem(IDC_STATIC_PIC2)->GetClientRect(&zcRect);
// 将图像显示在界面之上
m_image2.Draw(GetDlgItem(IDC_STATIC_PIC2)->GetDC()->m_hDC,
zcRect.left,
zcRect.top,
zcRect.Width(),
zcRect.Height());
当然,可以十分简单的用
image->Draw(this->GetDC()->m_hDC,0,0);即可
可以通过image->SetPixel(10,10,RGB(255,0,0));对图片上的(10,10)像素修改为红色
MFC 关于MFC中CImage的简单使用的更多相关文章
- MFC关于多线程中传递窗口类指针时ASSERT_VALID出错的另类解决 转
MFC关于多线程中传递窗口类指针时ASSERT_VALID出错的另类解决 在多线程设计中,许多人为了省事,会将对话框类或其它类的指针传给工作线程,而在工作线程中调用该类的成员函数或成员变量等等. ...
- 实现MFC扩展DLL中导出类和对话框
如果要编写模块化的软件,就要对对动态链接库(DLL)有一定的了解,本人这段时间在修改以前的软件时,决定把重复用的类和对话框做到DLL中,下面就从一个简单的例子讲起,如何实现MFC扩展DLL中导出类和对 ...
- mfc视类中错误:IntelliSense: declaration is incompatible with。。。解决方案
基本情况是我自己写了一个类: class CDib {....} 然后在mfc自动生成的“工程名Dlg.cpp”中使用类CDib,我的工程名是MfcPictureProcessing,所以类是clas ...
- 关于MFC框架程序中CWinApp::OnIdle
很早之前就发现,我写的图形引擎在MFC框架程序中的刷帧率始终在60FPS左右.好在自己的程序对刷帧率的要求不是很高,所以一直没有太过纠结此事.直到今天看了别人的程序才发现应该在函数CWinApp::O ...
- [转]MFC子线程中更新控件内容的两种办法
一.概述 每个系统中都有线程(至少都有一个主线程),而线程最重要的作用就是并行处理,提高软件的并发率.针对界面来说,还能提高界面的响应能力.一般的,为了应用的稳定性,在数据处理等耗时操作会单独在一个线 ...
- 【MFC】MFC改变对话框中静态文本的字体大小
MFC改变对话框中静态文本的字体大小 2010/08/09 11:30 VC的对话框字体设置对所有控件都有效,你不能单独地改变某个静态文本的字体.对于你的问题,需要首先用CreateFont来建立一个 ...
- C++ 关于MFC多线程编程中的一些注意事项 及自定义消息的处理
在多线程编程中,最简单的方法,无非就是利用 AfxBeginThread 来创建一个工作线程,看一下这个函数的说明: CWinThread* AFXAPI AfxBeginThread( AFX_T ...
- 【MFC】mfc控件位置调整和坐标确定 .
摘自DoubleLi: http://www.cnblogs.com/lidabo/archive/2012/08/24/2654678.html mfc控件位置调整和坐标确定 http://my ...
- asp.net mvc 中 一种简单的 URL 重写
asp.net mvc 中 一种简单的 URL 重写 Intro 在项目中想增加一个公告的功能,但是又不想直接用默认带的那种路由,感觉好low逼,想弄成那种伪静态化的路由 (别问我为什么不直接静态化, ...
随机推荐
- 3.3 哈尔小波空间W0
在3.2节我们学习了关于(3.8)定义的Vj的性质.特别的,我们可以乘以系数从一个Vj空间变换到另一个.我们这节学习V0和V1的关系. 将f1(t)∈V1投影至V0 我们考虑一个属于V1的函数f1(t ...
- Android学习笔记(十三)
Android中的广播机制 Android提供了一套完整的API,允许应用程序自由地发送和接受广播. 发送广播的方法借助于Intent,接受广播的方法需要广播接收器(BroadcastsReceive ...
- View加载过程
1. 先判断子类是否重写了loadView,如果有直接调用.之后调viewDidLoad完成View的加载.2 .如果是外部通过调用initWithNibName:bundle指定nib文件名的话,V ...
- Gson--Gson解析=等号出现乱码?
GSON使用笔记(1) -- 序列化时排除字段的几种方式 --3,关于Gson解析时候特殊符号,被转义的问题,如'单引号? //Creating the JSON object, and gettin ...
- super getClass()
首先看一段代码: import java.util.Date;public class Test extends Date{ public static void main(String[] args ...
- selenium处理极验滑动验证码
要爬取一个网站遇到了极验的验证码,这周都在想着怎么破解这个,网上搜了好多知乎上看到有人问了这问题https://www.zhihu.com/question/28833985,我按照这思路去大概实现了 ...
- mac-终端命令
发现一个比较好点的关于mac终端下命令的解释文档,全文粘贴到这,免得丢了(原文在此): Mac终端 命令行 [一]bash 终端设置 1.环境变量设置首先要知道你使用的Mac OS X是什么 ...
- Android Studio 修改字体
修改字体(font)大小(size) 本文引用: http://blog.csdn.net/caroline_wendy/article/details/21876727 Android St ...
- C#编辑图像文件EXIF信息
private void setImageTag(string imgFile, string tagFile, string imgTag, string imgTitle) { ; if (Fil ...
- C++设计模式-Prototype原型模式
作用: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. Prototype模式提供了一个通过已存在对象进行新对象创建的接口(Clone), Clone()实现和具体的语言相关,在C+ ...