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函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...
随机推荐
- python学习日志
马上就中秋节,想着再学点新的知识,本来想去继续研究前端知识来着,但是内个烦人的样式css还有js搞的有点脑壳头,以后就主学后端吧,要去死了前端这条心了? 那么寻寻觅觅就入坑最近几年大热的python吧 ...
- vue打包优化
网站首页第一次加载很慢,优化过后从十多二十秒缩短到了几秒,主要是打包的时候按需加载了,然后使用了gzip压缩. 这是优化之前的 发现vendor特别大,所有引用的第三方库都会打到这个包里面;另外就是之 ...
- CFGym 100198G 题解
一.题目链接 http://codeforces.com/gym/100198/problem/G 二.题意 看样例就能明白,写表达式解析器. 三 .思路 一看这题目,立马就会想到“后缀表达式”,考虑 ...
- vconsole使用
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- django-form.errors和前端上传文件
一.上传文件: 在相应的模型里面定义`FileField`或者是`ImageField`类型的字段,并且1.设置好`upload_to`参数来指定上传的路径. class User(models.Mo ...
- python中tornado的第一个例子
1 先安装tornado pip install tornado 2 新建tor.py 记住不能建立 tornado.py 这样的名字 不然会报错 ImportError: No module n ...
- ES6系列_4之扩展运算符和rest运算符
运算符可以很好的为我们解决参数和对象数组未知情况下的编程,让我们的代码更健壮和简洁. 运算符有两种:对象扩展运算符与rest运算符. 1.对象扩展( spread)运算符(...) (1)解决参数个数 ...
- php遍历所有文件
<?php function getdir($dir){ static $str = ''; if(is_file($dir)){ $str.=$dir.'<br>'; }else{ ...
- c# 将json数据转为键值对
string json = "{\"orderId\":\"000001\",\"haha\":\"001\" ...
- query简洁弹出层代码
<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...