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函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...
随机推荐
- 1、hadoop HA分布式集群搭建
概述 hadoop2中NameNode可以有多个(目前只支持2个).每一个都有相同的职能.一个是active状态的,一个是standby状态的.当集群运行时,只有active状态的NameNode是正 ...
- Python 定期检查Build_setting的编译情况
#!/usr/bin/python #_*_ coding:utf-8 _*_ import time from email.MIMEText import MIMEText from email.M ...
- python 书籍推荐 二
Python是一中面向对象的编程语言,语法简洁而清晰,具有丰富和强大的类库.对于初学编程者来说,首选Python是个非常棒的选择. 工具/原料 Python Python学习前的准备 1 学习任何 ...
- C# 通过二进制,将多个文件合并为一个。
C# 通过二进制,将多个文件合并为一个. /// <summary> /// 合并文件 /// </summary> /// <param name="strD ...
- WebService返回json格式数据供苹果或者安卓程序调用
1.新建一个WebService. 2. /// <summary> /// DemoToJson 的摘要说明 /// </summary> [WebService(Names ...
- java对图片进行操作,仅仅是小demo
package com.cy.thumb; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io ...
- 第4课 Hello QT
1. QT的安装 (1)双击:qt-opensource-windows-x86-mingw492-5.6.0.exe (2)安装过程中指定QT Creator安装目录下的mingw文件夹 (3)设置 ...
- 需登录账号与密码的网页爬取demo
public static String connect(String dataUrl){ String result = null; try { HttpClient httpclient = ne ...
- SPM——How to use github
In this semester, we take a class called 'Software Project Management'. And in this class, we have l ...
- java 重定向和转发 的区别
重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求.因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变. 重定向的速度比转发慢,因为浏览器 ...