StretchBlt函数和BitBlt函数的用法
StretchBlt和BitBlt都用在双缓冲视图中,用来显示一幅图像
一、StretchBlt
函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩。也即是将内存中的位图拷贝到屏幕上,并且可以根据屏幕画图区的大小来进行伸缩,适应响应的屏幕(或图像控件)
xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );
- rc.left;来获得,rc为保存了图像控件矩形区坐标信息)
- rc.top;来获得)
(一般都是整幅图片拷贝,所以该值为 0 )
该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。
CDC::BitBlt
BOOL BitBlt( int x, int
y, int nWidth, int nHeight, CDC*
pSrcDC, int xSrc, int ySrc, DWORD
dwRop );
BitBlt函数和上面的STretchBlt函数的参数基本上差不多,只是少了倒数第二个和倒数第三个参数:
nSrcWidth:源矩形宽度; 以及,nSrcHeight:源矩形高度
前面四个参数也是和目标矩形(也即是我们的图像控件区域)相关的,如果是图像控件的话,起点坐标也是(0,0),终点坐标就是矩形区的宽度和高度;
对于源矩形区域(指内存DC中的位图),只需要给出拷贝的起点即可,
BitBlt函数不会对原来的位图进行拉伸或压缩,只会根据我们给定的nWidth,nHeight
值来决定该有多少部分进行显示
下面一段代码给出了这两个函数的具体用法:
void CEnvirMonibeta1View::ShowBitmap(CDC *pDC, CString TotalName, const RECT &rc)
{
//显示图片函数LoadImage 根据位图(或图片)的全路径名TotalName加载图片
HBITMAP m_hBitmap;
m_hBitmap = (HBITMAP)
LoadImage(NULL,TotalName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE|LR_CREATEDIBSECTION);
// 之前在类中定义了一个CBitmap 类的对象m_bitmap,
if( m_bitmap.m_hObject )
{
m_bitmap.Detach(); //m_bitmap为创建的位图对象
}
m_bitmap.Attach(m_hBitmap); // 让位图对象m_bitmap 和我们加载的位图相关联(加载进来的位图只要提供一个位图句柄就可以)
//定义并创建一个内存设备环境
CDC m_dcMemory;
if( !m_dcMemory.CreateCompatibleDC(pDC) ) //创建兼容性的DC
return;
//定义一个位图结构体,将图片信息保存在位图结构体中
BITMAP bitmap;
m_bitmap.GetBitmap(&bitmap);
CBitmap *pbmpOld = NULL;
m_dcMemory.SelectObject(&m_bitmap);
//将位图选入临时内存设备环境
//获取屏幕画图区域(图像控件)的宽度和高度
int rcWidth = rc.right - rc.left;
int rcHeight = rc.bottom - rc.top;
//图片显示调用函数BitBlt
pDC->BitBlt(0,0,rcWidth,rcHeight,&dcBmp,0,0,SRCCOPY);
// 如果希望图片和矩形区域能自动适配,可以用下面的函数
// pDC->StretchBlt(0,0,rcWidth,rcHeight,&dcBmp,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
//下面是一些善后工作
dcBmp.SelectObject(pbmpOld); //恢复临时DC的位图
DeleteObject(&m_bitmap);//删除位图
dcBmp.DeleteDC();//删除后台DC
// Invalidate(); //一直调用OnDraw显示图片
}
StretchBlt函数和BitBlt函数的用法的更多相关文章
- BitBlt 函数 详解, StretchBlt、SetStretchBltMode、SetBrushOrgEx 按句柄截图、直接截取缩略图
BitBlt 该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境. 函数原型 [DllImport("gdi32.dll")] publi ...
- MFC函数之BitBlt
MFC函数之BitBlt // Cgame123View 绘制 void Cgame123View::OnDraw(CDC* pDC) { Cgame123Doc* pDoc = GetDocumen ...
- Python中的map()函数和reduce()函数的用法
Python中的map()函数和reduce()函数的用法 这篇文章主要介绍了Python中的map()函数和reduce()函数的用法,代码基于Python2.x版本,需要的朋友可以参考下 Py ...
- 转: ES6异步编程: co函数库的含义与用法
转: ES6异步编程: co函数库的含义与用法 co 函数库是著名程序员 TJ Holowaychuk 于2013年6月发布的一个小工具,用于 Generator 函数的自动执行. 比如,有一个 Ge ...
- matlab sparse函数和full函数用法详解(转)
sparse函数 功能:Create sparse matrix-创建稀疏矩阵 用法1:S=sparse(X)--将矩阵X转化为稀疏矩阵的形式,即矩阵X中任何零元素去除,非零元素及其下标(索引)组成矩 ...
- Python3 join函数和os.path.join用法
Python3 join函数和os.path.join用法 os.path.join()连接两个文件名地址的时候,就比os.path.join("D:\","test. ...
- 数据仓库之抽取数据:openrowset函数带bulk操作符的用法
原文:数据仓库之抽取数据:openrowset函数带bulk操作符的用法 在做数据仓库时,最重要的就是ETL的开发,而在ETL开发中的第一步,就是要从原OLTP系统中抽取数据到过渡区中,再对这个过渡区 ...
- java中Map的put函数和get函数用法
---内容开始--- 没有比较完整的说明他们的用法,一般就只能看源函数,但是看起来比较的费劲. 那么究竟put函数和get函数的用法是如何的呢? 当然java中的Map集合是有Key和Value的. ...
- Python函数装饰器原理与用法详解《摘》
本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...
随机推荐
- pycharm修改代码模板支持中文输出
python2.x默认不支持中文输出,需要在py的开头添加 #coding: utf- 在pycharm里面,选项,editor,file and code templates,选择python sc ...
- Java 获取字符串长度 length()
Java 手册 实例: public class Length { public static void main(String[] args) { String str = "hgdfas ...
- APR介绍
http://blog.csdn.net/jmshl/article/details/6773731 APR分析-整体篇 由于部门所使用的底层库与Apache Server有着“一定的渊源”,所以总有 ...
- ueditor上传图片时目录创建失败的问题解决方法,不用那么麻烦,其实修改php/config.json这个配置文件里面的路径就行!!
ueditor的真实上传路径提示出来,我进行了如下步骤: 找到了编辑器的上传处理类 Uploader.class.php,大约110行的位置找到了上传失败的提示位置, 将 $this->stat ...
- kvmgt-kernel 实现GPU虚拟化
KVMGT-kernel是Intel开源技术01.org推出的一项完整的GPU虚拟化解决方案,在KVM和XEN的基础上实现.本文档对该技术进行相应测试,让大家有个基本参考和了解.KVMGT-kerne ...
- Selenium Webdriver——使用reportng
ReportNG is a simple HTML reporting plug-in for the TestNG unit-testing framework. It is intended as ...
- Selenium Webdriver——去哪儿网输入实例
1.对出发地方和到达地方进行Xpath定位,这里采用了Xpath的text() 函数进行定位 用following::sibling选择当前元素后的兄弟元素,比如出发框的Xpath表达式如下: .// ...
- PS7.0快捷键和使用技巧
选择工具:矩形.椭圆选框工具 [M]裁剪工具 [C]移动工具 [V]套索.多边形套索.磁性套索 [L]魔棒工具 [W] 编辑工具:修复画笔.修补工具 [J]画笔.铅笔工具 [B]橡皮图章.图案图章 [ ...
- ScheduledThreadPoolExecutor 线程池调度 使用
package other; import java.util.concurrent.Callable; import java.util.concurrent.Executors; import j ...
- vs读取ini文件
读取string类型: DWORD GetPrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpDefaut,LPSTR ...