当前位置: 主页 > 智能产品 >

StretchBlt函数和BitBlt函数的用法

StretchBlt函数和BitBlt函数的用法

StretchBlt函数和BitBlt函数的用法

TAG标签

StretchBlt和BitBlt都用在双缓冲看待中,用于显示图像

一、StretchBlt

效能将位图复制的到源矩形的目的矩形。,争辩目的DEV设置的调式绘制或紧缩图像。即,将内存中间的位图复制的到银幕上。,并可争辩银幕面积有弹力的。,自帮忙足以媲美的人银幕(或图像把持)

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 中 logical 单位) of the upper-left corner of the source 矩形。

nSrcWidth:源矩形宽度;(倘若笔者下定义了一点钟妥协位图典型MYBMP生计位图知识,因而可以运用增益宽度

nSrcHeight:源矩形地平纬度( 倘若笔者下定义一点钟妥协位图典型MYBMP生计位图知识,因而可以运用增益宽度

dwRop:标明要担当管理人的模仿开刀。(这有很多选择。,笔者的普通选择SRCCOPY:将源矩形连续的复制的到目的矩形区域。。

二、BitBlt效能

该效能对标明的源容易周围的区域中间的像素举行位块(bit_block)替换,输送到目的容易周围的。

BOOL BitBlt( intx, inty, intnWidth, intnHeight, CDC*pSrcDC, intxSrc, intySrc, DWORDdwRop);

BitBlt效能和上面的STretchBlt效能的决定因素基本将近,较少地的以第二位倒计时和第三倒计时决定因素。:

nSrcWidth:源矩形宽度; 与,nSrcHeight:源矩形地平纬度

前第四决定因素也与目的矩形关于(即,,倘若是图像窗口小个体,集中使动作协调也为(0)。,0),起点使动作协调执意矩形区的宽度和地平纬度;

对于源矩形区域(内存DC中间的位图),只需规定拷贝的根源点,

BitBlt效能弱对原件的位图举行图画或紧缩,它只会因为笔者所授予的nWidth,nHeight 值以决定要显示多多少少个个体

上面的加密规定了这两个效能的详细用法。:

void CEnvirMonibeta1View::ShowBitmap(CDC *pDC, CString TotalName, const RECT 型钢混凝土)
{
显示图像效能LoadImage 争辩位图(或图像)总名的使完整途径名声负担图片
HBITMAP m_hBitmap;
m_hBitmap = (HBITMAP)                                      LoadImage(NULL,TotalName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE|LR_CREATEDIBSECTION);
// 领先在类中下定义了一点钟cBMPMAP 类情郎My位图,
if( )
{
();           My位图是安排的位图情郎
}
(m_hBitmap);   // 让位图情郎My位图 它与笔者负担的位图相关性联(负担的位图被供给)。

下定义和安排内存容易周围的
CDC  m_dcMemory;
if( !m_dcMemory.CreateCompatibleDC(pDC) )   安排和睦相处DC
return;


下定义位图妥协,在位图妥协中生计图片知识
BITMAP bitmap;
(&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,);

以下是相当后续任务
(pbmpOld);           回复暂时DC的位图
DeleteObject(&m_bitmap);//切除位图
切除后盾DC
// Invalidate();   常常呼唤OnDead来显示图片

}