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. Django学习系列19:完成最简单可用的网站——确保功能之间相互隔离

    前面遗留的问题,首先时功能测试运行结束后的清理:其次是目前我们的待办清单只允许创建一个大家公用的清单. 如何隔离测试,运行功能测试后待办事项一直存在于数据库中,这会影响下一次测试. 运行单元测试时,D ...

  2. 如何阻止<a>标签默认行为和表单提交

    阻止<a>标签默认行为 方式一 (通过return false) <!DOCTYPE html> <html> <head> <meta char ...

  3. vue 中echart折线自适应

    前端时间做一个vue的项目,echart是按需引入的如下: // 引入 ECharts 主模块 import echarts from 'echarts/lib/echarts' // 引入折线图 i ...

  4. 水果商城 ( Iview+ SSM + MySQL )

    因为时间原因,只做了后台,前台本来是打算使用 uni 框架 的. 有文档.E-R流程图.数据库文件. 项目源码地址:https://github.com/oukele/MyProject-Two

  5. Newnode's NOI(P?)模拟赛 第三题 (主席树优化建图 + tarjan)

    题目/题解戳这里 这道题题目保证a,b,ca,b,ca,b,c各是一个排列-mdzz考场上想到正解但是没看到是排列,相等的情况想了半天-然后写了暴力60分走人- 由于两两间关系一定,那么就是一个竞赛图 ...

  6. Python之subprocess模块的使用

    1.subprocess调用系统的命令 #!/usr/bin/env python # -*- coding: utf-8 -*- import subprocess import sys compl ...

  7. VUE: 移动端长按弹出确认删除地址(后面测试发现IOS有BUG,后面有更新随笔,更新后的亲测有效)

    收货地址的删除方式可能有很多种,我目前见过的暂时只有两种(1.在编辑页删除  2.长按某一条收货地址弹出是否删除地址) 在开发的项目上要求第二种删除方法,于是记录一下我写的代码 ~ 1.首先,在移动端 ...

  8. join on 和group

                       左边的表是article文章表,右边的是comment文章回复表. 今天mysql查询的时候,遇到了有趣的事,任务是查询数据库需要得到以下格式的文章标题列表,并按 ...

  9. java 项目 文件关系 扫描 注释注入(2)

    https://www.cnblogs.com/daimajun/p/7152970.html(copy) 先提一嘴 @RequestMapping(“url”),这里的 url写的是请求路径的一部分 ...

  10. LibreOffice/Calc:在表格中始终显示某列/某行

    本文适用于LibreOffice Calc 5.1.6.2 + Ubuntu 16.04,熊猫帮帮主@cnblogs 2018/3/5 编写表格时,我们常常使用表格最左侧的一列和最上方的一行作为序号列 ...