StretchBlt和BitBlt用于双缓冲区视图中显示图像
一. StretchBlt
函数将位图从源矩形复制到目标矩形,并根据需要在目标设备设置的模式下缩放图像。 也就是说,可以将存储器中的位图复制到屏幕上,根据屏幕的绘制区域的大小进行伸缩,并适应于响应的屏幕(或图像控制)
OOLstretchblt(intx,int y,int nWidth,int nHeight,CDC* pSrcDC,int xSrc,int ySrc,int nSrcWidth,int nSrcHeight,dworrorc(获取图像控件的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轴左上角坐标; 3358 www.Sina.com/specifies the x-coordinate (inlogicalunits ) of the upper-leftcornerofthesourcerectangle.nsr cwidth 3335(一般都是整幅图片拷贝,所以该值为 0 )
二、BitBlt函数该函数将指定源设备环境区域内的像素转换为比特块(bit_block )并传输到目标设备环境。
CDC:BitBlt
3358 www.Sina.com/x http://www.Sina.com/y http://www.Sina.com/nwidth 3358 www.Sina.com/nheight 3358 www.Sina xsrsr
(如果我们定义了一个结构体BITMAP类型m_bmp保存位图信息,那么可以用m_bmp.bmWidth获取宽度)
( 如果我们定义了一个结构体BITMAP类型m_bmp保存位图信息,那么可以用m_bmp.bmHeight获取宽度)
(这个有很多选择,我们一般选择SRCCOPY:将源矩形区域直接拷贝到目标矩形区域。)
BOOL BitBlt(int
BitBlt函数并不拉伸或压缩原始位图,而是根据给定的nWidth、nHeight值确定显示哪些部分
, int
voidcenvirmonibeta1view :3360 show bitmap (CDC * PDC,CString TotalName,const RECT rc ) )。
{
//根据显示图像的函数LoadImage位图(或图像)的完整路径名TotalName加载图像
HBITMAP m_hBitmap;
m_hbitmap=(hbitmap ) loadimage (空,TotalName,IMAGE_BITMAP,0,0,lr _ load from file|lr _ defaultsize|ll
//以前,在类中定义了CBitmap类的对象m_bitmap,
if(m_bitmap.m_hobject ) )。
{
m_bitmap.Detach (; //m_bitmap是创建的位图对象
}
m_bitmap.attach(m_hbitmap; //将位图对象m_bitmap与我们加载的位图相关联(加载的位图只需要提供一个位图句柄) )。
//定义并创建内存设备环境
CDC m_dcMemory;
if (! 33558 www.Sina.com/. createcompatibledc (PDC ) )//创建兼容的DC
返回;
, int
位图位图;
m _ bitmap.getbitmap (http://www.Sina.com /
CBitmap *pbmpOld=NULL; 33558 www.Sina.com/. select object (m _ bitmap ); //将位图选择为临时存储器设备环境
//获取屏幕绘制区域(图像控件)的宽度和高度
int rcWidth=rc.right - rc.left;
int rcHeight=rc.bottom - rc.top;
//图像显示调用函数BitBlt
PDC-bitblt (0,0,RC宽度,rcHeight,dcBmp,0,0,SRCCOPY );
//想要自动拟合图像和矩形区域时,使用以下函数
//PDC-stretchblt (0,0,rcWidth,rcHeight,dcBmp,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY );
//接下来是善后处理
DBMP.selectobject(PBMpold ); //恢复临时直流的位图
删除对象(m _ bitmap; //删除位图
dcBmp.DeleteDC (; //删除后台直流
//Invalidate (; 调用OnDraw继续显示图像
}