圖片顏色掩碼操作

來源:互聯網
上載者:User

 

//關鍵代碼

CBitmap * BmpColorMaskOp(CBitmap &bmpSrc, COLORREF colorMask, DWORD dwOp)<br />{<br /> //映像資訊<br /> BITMAP bmpInfo;<br /> bmpSrc.GetBitmap(&bmpInfo);<br /> int nWidth = bmpInfo.bmWidth;<br /> int nHeigth = bmpInfo.bmHeight;</p><p> //建立DC裝置<br /> HDC hDC = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);<br /> CDC *pDC = CDC::FromHandle(hDC);</p><p> //源DC裝置<br /> CDC scrDC;<br /> scrDC.CreateCompatibleDC(pDC);<br /> scrDC.SelectObject(&bmpSrc);</p><p> //目標DC裝置<br /> CDC dstDC;<br /> dstDC.CreateCompatibleDC(pDC);<br /> CBitmap *bmpDst = new CBitmap;<br /> bmpDst->CreateBitmapIndirect(&bmpInfo);<br /> dstDC.SelectObject(bmpDst);</p><p> //填充背景色<br /> dstDC.FillSolidRect(CRect(0, 0, nWidth, nHeigth), colorMask);</p><p> //按制定操作方式複製位元影像<br /> dstDC.BitBlt(0, 0, nWidth, nHeigth,<br /> &scrDC,<br /> 0, 0,<br /> dwOp);</p><p> //恢複和刪除目標裝置<br /> dstDC.SelectObject( (CBitmap *)NULL);<br /> dstDC.DeleteDC();</p><p> //恢複和刪除源裝置<br /> scrDC.SelectObject( (CBitmap *)NULL);<br /> scrDC.DeleteDC();</p><p> //刪除hDC<br /> DeleteDC(hDC);</p><p> return bmpDst;<br />}

 

//視圖繪製部分代碼

void CMDI1View::OnDraw(CDC* pDC)<br />{<br />CMDI1Doc* pDoc = GetDocument();<br />ASSERT_VALID(pDoc);<br />// TODO: add draw code for native data here</p><p> CBitmap bmpSrc;<br /> bmpSrc.LoadBitmap(IDB_BITMAP1);<br /> CBitmap *bmpDst = BmpColorMaskOp(bmpSrc,<br /> pDoc->colorMask, pDoc->dwMaskOp);</p><p> BITMAP bmpInfo;<br /> bmpSrc.GetBitmap(&bmpInfo);</p><p> CDC memDC;<br /> memDC.CreateCompatibleDC(pDC);<br /> memDC.SelectObject(bmpDst);</p><p> CRect rcClient;<br /> GetClientRect(rcClient);<br /> pDC->SetStretchBltMode(HALFTONE);<br /> pDC->StretchBlt(0, 0, rcClient.Width(), rcClient.Height(),<br /> &memDC,<br /> 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight,<br /> SRCCOPY);<br /> memDC.SelectObject((CBitmap *)NULL);</p><p> delete bmpDst;</p><p>}<br />

 

//文檔控制部分代碼

// MDI1Doc.h : interface of the CMDI1Doc class<br />class CMDI1Doc : public CDocument<br />{<br />// Attributes<br />public:<br /> static int m_DocID;<br /> COLORREF colorMask;<br /> DWORD dwMaskOp;<br />

int CMDI1Doc::m_DocID = 0;</p><p>BOOL CMDI1Doc::OnNewDocument()<br />{<br /> if (!CDocument::OnNewDocument())<br /> return FALSE;</p><p> // TODO: add reinitialization code here<br /> // (SDI documents will reuse this document)</p><p> CString szTitle = _T("");</p><p> colorMask = 0;<br /> dwMaskOp = SRCCOPY;</p><p> switch(m_DocID)<br /> {<br /> case(1)://Red<br /> {<br /> colorMask = RGB(255, 0, 0);<br /> dwMaskOp = SRCAND;<br /> szTitle = _T("Red Channle");<br /> break;<br /> }<br /> case(2)://Green<br /> {<br /> colorMask = RGB(0, 255, 0);<br /> dwMaskOp = SRCAND;<br /> szTitle = _T("Green Channle");<br /> break;<br /> }<br /> case(3)://Blue<br /> {<br /> colorMask = RGB(0, 0, 255);<br /> dwMaskOp = SRCAND;<br /> szTitle = _T("Blue Channle");<br /> break;<br /> }<br /> default:<br /> {<br /> dwMaskOp = SRCCOPY;<br /> szTitle = _T("RGB Channle");<br /> }<br /> }<br /> m_DocID++;<br /> SetTitle(szTitle);</p><p> return TRUE;<br />}

 

//效果

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.