欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

StretchBlt函数和BitBlt函数的区别和用法

程序员文章站 2022-04-18 11:49:55
StretchBlt和BitBlt都用用来显示一幅图像 一、StretchBlt 函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩。也即是将内存中的位图拷贝到屏幕上,并且可以根据屏幕画图区的大小来进行伸缩,适应响应的屏幕(或图像控件) 二、BitBlt函数 二、B ......

stretchblt和bitblt都用用来显示一幅图像

一、stretchblt

函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩。也即是将内存中的位图拷贝到屏幕上,并且可以根据屏幕画图区的大小来进行伸缩,适应响应的屏幕(或图像控件)

bool stretchblt( int x, int y, int nwidth, int nheight, cdc* psrcdc, int xsrc, int ysrc, int nsrcwidth, int nsrcheight, dword dwrop );
x:逻辑单元x轴左上角坐标; (获取图像控件的dc后,该值一般设为 0 ) 
y:逻辑单元y轴左上角坐标; (获取图像控件的dc后,该值一般设为 0 ) 
nwidth: 设备矩形宽度;(即是图像控件的宽度,通过int rcwidth = rc.right - rc.left;来获得,rc为保存了图像控件矩形区坐标信息)
nheight:设备矩形高度;  (即是图像控件的高度,通过int rcheight = rc.bottom - rc.top;来获得)
psrcdc: 源设备上下文;   (就是我们定义的内存dc,然后取地址)
xsrc :源矩形x轴左上角坐标;   (一般都是整幅图片拷贝,所以该值为 0 )
ysrc: 源矩形y轴左上角坐标;  (一般都是整幅图片拷贝,所以该值为 0 )
specifies the x-coordinate (in logical units) of the upper-left corner of the source rectangle.
nsrcwidth:源矩形宽度;(如果我们定义了一个结构体bitmap类型m_bmp保存位图信息,那么可以用m_bmp.bmwidth获取宽度)
nsrcheight:源矩形高度 ( 如果我们定义了一个结构体bitmap类型m_bmp保存位图信息,那么可以用m_bmp.bmheight获取宽度)
dwrop:指定要进行的光栅操作。(这个有很多选择,我们一般选择srccopy:将源矩形区域直接拷贝到目标矩形区域。)
二、bitblt函数

该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。

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 值来决定该有多少部分进行显示