帮忙看看这个位图操作函数是做什么的?很简单的。

quanbaoxiao 2003-08-19 02:10:33
void CCISBitmap::DrawTransparent(CDC * pDC, int x, int y, COLORREF crColour,
int zoom)
{
COLORREF crOldBack = pDC->SetBkColor(m_crWhite);
COLORREF crOldText = pDC->SetTextColor(m_crBlack);
CDC dcImage, dcTrans;

// Create two memory dcs for the image and the mask
dcImage.CreateCompatibleDC(pDC);
dcTrans.CreateCompatibleDC(pDC);

// Select the image into the appropriate dc
CBitmap* pOldBitmapImage = dcImage.SelectObject(this);

// Create the mask bitmap
CBitmap bitmapTrans;
int nWidth = Width();
int nHeight = Height();
bitmapTrans.CreateBitmap(nWidth, nHeight, 1, 1, NULL);

// Select the mask bitmap into the appropriate dc
CBitmap* pOldBitmapTrans = dcTrans.SelectObject(&bitmapTrans);
CBitmap* pOldBitmapTrans = dcTrans.SelectObject(&bitmapTrans);

// Build mask based on transparent colour
dcImage.SetBkColor(crColour);
dcTrans.BitBlt(0, 0, nWidth, nHeight, &dcImage, 0, 0, SRCCOPY);

// Do the work - True Mask method - cool if not actual display
主要是下面的几条语句不知道是干什么的。
pDC->StretchBlt(x, y, nWidth/zoom, nHeight/zoom, &dcImage, 0, 0,
nWidth, nHeight, SRCINVERT);

pDC->StretchBlt(x, y, nWidth/zoom, nHeight/zoom, &dcTrans, 0, 0 ,
nWidth, nHeight, SRCAND);
pDC->StretchBlt(x, y, nWidth/zoom, nHeight/zoom, &dcImage, 0, 0,
nWidth, nHeight, SRCINVERT);

// Restore settings
dcImage.SelectObject(pOldBitmapImage);
dcTrans.BitBlt(0, 0, nWidth, nHeight, &dcImage, 0, 0, SRCCOPY);

// Do the work - True Mask method - cool if not actual display
主要是下面的几条语句不知道是干什么的。
pDC->StretchBlt(x, y, nWidth/zoom, nHeight/zoom, &dcImage, 0, 0,
nWidth, nHeight, SRCINVERT);

pDC->StretchBlt(x, y, nWidth/zoom, nHeight/zoom, &dcTrans, 0, 0 ,
nWidth, nHeight, SRCAND);
pDC->StretchBlt(x, y, nWidth/zoom, nHeight/zoom, &dcImage, 0, 0,
nWidth, nHeight, SRCINVERT);

// Restore settings
dcImage.SelectObject(pOldBitmapImage);
dcTrans.SelectObject(pOldBitmapTrans);
pDC->SetBkColor(crOldBack);
pDC->SetTextColor(crOldText);
}
...全文
34 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
quanbaoxiao 2003-08-19
  • 打赏
  • 举报
回复
up
quanbaoxiao 2003-08-19
  • 打赏
  • 举报
回复
这个知道,能不能详细地说说其他呢?
jack_wq 2003-08-19
  • 打赏
  • 举报
回复
最后一个参数是缩放倍数!
quanbaoxiao 2003-08-19
  • 打赏
  • 举报
回复
但是当我传入的参数为
(pDC , x , y , RGB(255 , 255 , 255) , 1)
时,就是显示了正常的图片,就是和下面的函数是一样的,为什么呢?

void CCISBitmap::DrawTransparent(CDC * pDC, int x, int y, COLORREF crColour,int zoom)
{
CDC dcMem ;
dcMem.CreateCompatibleDC(pDC) ;
CBitmap *pOldBmp = dcMem.SelectObject(this) ;
BITMAP bm ;
::GetObject(this->GetSafeHandle() , sizeof(BITMAP) , &bm) ;
pDC->BitBlt(x , y , bm.bmWidth , bm.bmHeight , &dcMem , x , y , SRCCOPY) ;
dcMem.SelectObject(pOldBmp) ;
dcMem.DeleteDC() ;
}
wangweintk 2003-08-19
  • 打赏
  • 举报
回复
向pDC画一个透明位图,左上角顶点(x,y),透明色ctColour,zoom为放大倍数。

StretchBlt是放缩和拷贝位图。
jack_wq 2003-08-19
  • 打赏
  • 举报
回复
缩放画图!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧