【转】StretchBlt函数和BitBlt函数的用法 – Lthis

原帖地址:StretchBlt功用和BitBlt功用的用法

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
nSrcWidth:源矩形宽度;(假使我们家明确第一框架位图典型MY-BMP来保持原状位图消息,为了你就可以流行宽度了。
nSrcHeight:源矩形高音调的 ( 假使我们家明确了第一框架位图典型MY-BMP,我们家保存位图消息。,为了你就可以流行宽度了。
dwRop  :指出要给予帮助的样品处理。(这有很多选择。,我们家通常选择硬拷贝。:将源矩形率直的模仿到目的矩形区域。。)        

二、BitBlt功用

该功用对指出的源能力典礼区域正中鹄的像素停止位块(bit_block)替换,被传送到目的能力典礼。

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功用不会的对模型的位图停止拔出或紧缩,只地基我们家做准备的宽度,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( !(PDC) )          // 成立互换性DCreturn;


     //明确位图框架,在位图框架中保持原状图片消息    BITMAP bitmap;
    (&位图)           

    CBitmap *pbmpOld = NULL;
    (&m_位图)                // 将位图选择到暂时贮存器能力典礼中

    //获取掩藏地基区域的宽度和高音调的(图像限制)。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_位图)                            // 剪下位图
    ();                                   // 剪下底色DC
    // Invalidate();                                    // 不断地转移OnDead来显示图片
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注