MFC中png格式图片贴图的实现(2011-07-14 19:10:29)  ___转载自新浪

初学vc,正在做五子棋,五子棋中的图片格式都是bmp格式的,所以贴图用CBitmap可以很简单的实现。刚开始也没有在意那么多,今天刚把五子棋做完就兴冲冲的把代码和release版本的exe文件发给我的指导老师看,发现我的文件相当大,所以指导老师给我指出了bmp格式的图片比较占内存,让我寻找一下png格式的贴图。

于是我在网上搜索了大量的资料,看到了有用API OleLoadPicture来加载JPG、GIF格式的图片,但是这种方法不支持png格式,并且GIF格式只能加载第一帧,所以决定放弃这种方法。还看到可以用库CxImage,但是觉得这种方法比较麻烦,所以也决定放弃。看了很多种方法之后,看到有人说CImage类比较容易,所以打算尝试一下。

经过阅读网上的资料和方法,终于被我成功加载了一张png格式的背景图片,下面我总结一下贴图的步骤:

(1)首先在头文件stdafx.h中包含#include <atlimage.h>

(2)在工程视图文件的Ondraw函数中添加一下代码:

CImage img;
 HRESULT ret = img.Load(_T("res/wuziqi.png")); //wuziqi.png是我要加载的图片名称,包含路径

HBITMAP hbitmap = img.Detach();

//像操作 BMP 图片一样处理图片 ,下面是显示图片的操作

CBitmap cBitmap;
 BITMAP bitmap;
 CDC memdc;
 cBitmap.Attach(hbitmap);
 memdc.CreateCompatibleDC(pDC);
 memdc.SelectObject(hbitmap);
 cBitmap.GetBitmap(&bitmap);
 pDC->StretchBlt(0,0,800,590,&memdc,0,0,800,590,SRCCOPY);

下面让我们来看一下StretchBlt这个函数:

函数功能:函数从源矩形中复制一个位图到目标矩形,必要时按目前目标设备设置的模式进行图像的拉伸或压缩。

函数原型:BOOL StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop);

参数:

hdcDest:指向目标设备环境的句柄。

 

  nXOriginDest:指定目标矩形左上角的X轴坐标,按逻辑单位表示坐标。

 

  nYOriginDest:指定目标矩形左上角的Y轴坐标,按逻辑单位表示坐标。

 

  nWidthDest:指定目标矩形的宽度,按逻辑单位表示宽度。

 

  nHeightDest:指定目标矩形的高度,按逻辑单位表示高度。

 

  hdcSrc:指向源设备环境的句柄。

 

  nXOriginSrc:指向源矩形区域左上角的X轴坐标,按逻辑单位表示坐标。

 

  nYOriginSrc:指向源矩形区域左上角的Y轴坐标,按逻辑单位表示坐标。

 

  nWidthSrc:指定源矩形的宽度,按逻辑单位表示宽度。

 

  nHeightSrc:指定源矩形的高度,按逻辑单位表示高度。

 

  dwRop:指定要进行的光栅操作。光栅操作码定义了系统如何在输出操作中组合颜色,这些操作包括刷子、源位图和目标位图等对象。

因为我的目标窗口宽为800,高为590,并且我的图片大小也是800*590的,我要让整张图片填充整个窗口,所以参数就是pDC->StretchBlt(0,0,800,590,&memdc,0,0,800,590,SRCCOPY);

我暂时只加载了png格式的图片,至于其他格式的图片的加载是否也能完全参照这个步骤来完成还有待考证,我看到网上说用这个方法gif不能动态的显示,希望大家看到后找到解决方案的能多多指导我。在这里我先谢谢各位了。

MFC中png格式图片贴图的实现的更多相关文章

  1. mfc中循环显示图片

    UINT CPalmIdentDlg::UpdateCImg(LPVOID p) { struct params *pa = (struct params*)p; int *imgarray = pa ...

  2. 微信支付特约商户进件中base64格式图片上传

    微信图片上传接口地址:https://api.mch.weixin.qq.com/v3/merchant/media/upload 1.上传方法 1 using HttpHandlerDemo; 2 ...

  3. MFC 中CString 格式16进制转int 十进制

    代码:CString  v_hex ; int v_dec; v_dec = wcstol(v_hex, NULL, 16);

  4. MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片

    版权声明:本文为博主原创文章,转载请注明CSDN博客源地址! 共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/26404733   ...

  5. 如何在latex 中插入EPS格式图片

    如何在latex 中插入EPS格式图片 第一步:生成.eps格式的图片 1.利用visio画图,另存为pdf格式的图片 利用Adobe Acrobat裁边,使图片大小合适 另存为.eps格式,如下图所 ...

  6. 解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移

    解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移 解决办法1:设置tabBarItem的imageInsets属性 代码示例: childContro ...

  7. 调用opencv相关函数,从视频流中提取出图片序列&&&&jpg图片序列,转化成avi格式视频

    /************************ @HJ 2017/3/30 参考http://blog.sina.com.cn/s/blog_4b0020f301010qcz.html修改的代码 ...

  8. html中canvas渲染图片,并转化成base64格式保存

    最近在做一个上传头像然后保存显示的功能,因为涉及到裁剪大小和尺寸比例,所以直接上传图片再展示的话,就会出现问题,所以就想用canvas来渲染裁剪后的图片,然后转化成base64格式的图片再存储,这样取 ...

  9. 在imge控件中直接显示图片(图片是byte[]格式)

    在工作过程中遇到了这个问题,在网上查了一些资料,结合自己的解决方法及解决过程总结了下,方面以后查阅.如果能帮到同样遇到这个问题的你,将非常高兴哦~_~ 由于asp.net中的Image控件是在Syst ...

随机推荐

  1. XMLHttpRequest status为0

    //创建XMLHttpRequest()对象 var request = new XMLHttpRequest();  ...... 今天写一个ajax , 明明是有结果返回的,但得到的request ...

  2. 题解 【POJ1187】 陨石的秘密

    解析 考虑到数据范围,其实我们可以用记搜. 设\(f[a][b][c][d]\)表示还剩\(a\)个'{}',\(b\)个"[]",\(c\)个"()",深度\ ...

  3. SpringBoot AOP介绍

    说起spring,我们知道其最核心的两个功能就是AOP(面向切面)和IOC(控制反转),这边文章来总结一下SpringBoot如何整合使用AOP. 一.示例应用场景:对所有的web请求做切面来记录日志 ...

  4. Struts增删改查

    1.导入相关的pom依赖(struts.自定义标签库的依赖) <dependency> <groupId>jstl</groupId> <artifactId ...

  5. mysql简单用法

    来源:http://hi.baidu.com/demon119/item/e4917f30b6482949023edc33 mysql 用法 #mysql -uroot -proot //可直接登录m ...

  6. 初识 ZeroMQ

    由于网上和官方的ZeroMQ主要是讲解和说明大都是基于C.PHP.Java偏偏.Net的很少,可能你看完80多页的官方文档仍被C代码搞的晕晕乎乎的,我这里就将资料收集整理成几篇博文同时用c#重新实现D ...

  7. HYSBZ - 3813 奇数国 欧拉函数+树状数组(线段树)

    HYSBZ - 3813奇数国 中文题,巨苟题,巨无敌苟!!首先是关于不相冲数,也就是互质数的处理,欧拉函数是可以求出互质数,但是这里的product非常大,最小都2100000,这是不可能实现的.所 ...

  8. JavaWeb-RESTful(一)_RESTful初认识

    系列博文 JavaWeb-RESTful(一)_RESTful初认识 传送门 JavaWeb-RESTful(二)_使用SpringMVC开发RESTful_上 传送门 JavaWeb-RESTful ...

  9. Gitlab启动、停止、重启(两种启动方式)

    因为Gitlab不是我部署的,是之前总监部署的,服务器突然更新系统了,Git服务器就没有自启··自启··自启······,自己操作启动没有成功,然后网上搜了一下都是这三种启动关闭重启的方式,可是我这里 ...

  10. PHP-windows下IDEA配置网页地址