MFC中png格式图片贴图的实现
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格式图片贴图的实现的更多相关文章
- mfc中循环显示图片
UINT CPalmIdentDlg::UpdateCImg(LPVOID p) { struct params *pa = (struct params*)p; int *imgarray = pa ...
- 微信支付特约商户进件中base64格式图片上传
微信图片上传接口地址:https://api.mch.weixin.qq.com/v3/merchant/media/upload 1.上传方法 1 using HttpHandlerDemo; 2 ...
- MFC 中CString 格式16进制转int 十进制
代码:CString v_hex ; int v_dec; v_dec = wcstol(v_hex, NULL, 16);
- MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片
版权声明:本文为博主原创文章,转载请注明CSDN博客源地址! 共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/26404733 ...
- 如何在latex 中插入EPS格式图片
如何在latex 中插入EPS格式图片 第一步:生成.eps格式的图片 1.利用visio画图,另存为pdf格式的图片 利用Adobe Acrobat裁边,使图片大小合适 另存为.eps格式,如下图所 ...
- 解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移
解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移 解决办法1:设置tabBarItem的imageInsets属性 代码示例: childContro ...
- 调用opencv相关函数,从视频流中提取出图片序列&&&&jpg图片序列,转化成avi格式视频
/************************ @HJ 2017/3/30 参考http://blog.sina.com.cn/s/blog_4b0020f301010qcz.html修改的代码 ...
- html中canvas渲染图片,并转化成base64格式保存
最近在做一个上传头像然后保存显示的功能,因为涉及到裁剪大小和尺寸比例,所以直接上传图片再展示的话,就会出现问题,所以就想用canvas来渲染裁剪后的图片,然后转化成base64格式的图片再存储,这样取 ...
- 在imge控件中直接显示图片(图片是byte[]格式)
在工作过程中遇到了这个问题,在网上查了一些资料,结合自己的解决方法及解决过程总结了下,方面以后查阅.如果能帮到同样遇到这个问题的你,将非常高兴哦~_~ 由于asp.net中的Image控件是在Syst ...
随机推荐
- Websocket @serverendpoint 404
今天写一个前后端交互的websocket , 本来写着挺顺利的,但测试的时候蒙了,前端websocket发的连接请求竟然连接不上 返回状态Status 报了个404 ,然后看后台onError方法也没 ...
- web页面ios浏览器img图片的坑
大家都知道ios浏览器有个默认的内置事件,就是长按屏幕,会放大预览你点击的内容. 不同浏览器效果各异,有的浏览器弹出提示框,预览图片或保存图片.主要呈下面2中形式.体验最差的就是后者,会直接将页面中的 ...
- JS 循环的两种方式
// 1.for循环 for (var i = 0; i <= 10; ++ i) { console.log(i); } // 2.while循环 var i = 0; while (i &l ...
- (八)zabbix获取到的数值自定义单位
1) 查找php文件 # find / -name "func.inc.php" /usr/share/zabbix/include/func.inc.php 2)修改文件 #vi ...
- Javac可以编译,Java显示找不到或无法加载主类
运行时候加入完整包名.
- timestamp和datetime
datetime数据类型在MySQL之前占8个字节,5.6之后占5个字节,datetime的范围1000-01-01 00:00:00------9999-12-31 23:59:59,格式采用YYY ...
- pyspark中的dataframe的观察操作
来自于:http://www.bubuko.com/infodetail-2802814.html 1.读取: sparkDF = spark.read.csv(path) sparkDF = spa ...
- css3常用动画大全:translate、scale、opacity、rotate (转)
/* animation */ .a-bounce,.a-flip,.a-flash,.a-shake,.a-swing,.a-wobble,.a-ring{-webkit-animation:1s ...
- ES大批量写入提高性能的策略
1.用bulk批量写入 你如果要往es里面灌入数据的话,那么根据你的业务场景来,如果你的业务场景可以支持让你将一批数据聚合起来,一次性写入es,那么就尽量采用bulk的方式,每次批量写个几百条这样子. ...
- codeforces666A
Reberland Linguistics CodeForces - 666A First-rate specialists graduate from Berland State Institute ...