//------------------------------------------------------------------------------------- HBITMAP CMainFrame::CVistaMenuIcon::QueryIcon (UINT nID) { std::map<UINT, FCObjImage*>::iterator i = m_tab.find(nID) ; if (i != m_tab.end()) return *i->second ; FCObjImage * pImg = new FCObjImage ; pImg->LoadResource (nID, L"PNG", IMG_PNG) ; if (pImg->IsValidImage() && (pImg->ColorBits() == 32)) { pImg->ApplyEffect (FCEffectPremultipleAlpha()) ; } m_tab[nID] = pImg ; return *pImg ; }
//================================================================================= // 画线基类/base class of drawline (32 bit) void CCmdImgDrawlineBase::Implement (FCObjImage & img, FCObjProgress * Percent) { if (!img.IsValidImage() || (img.ColorBits() != 32)) return ; m_nAlpha = FClamp0255 (m_nAlpha) ; // 制作大小一样的alpha位图,注意:位图数据初始化为0(也即黑色) FCObjImage imgAlpha (img.Width(), img.Height(), 8) ; // draw lines this->DrawAlphaMask (imgAlpha) ; //imgAlpha.Save("D:\\a.bmp"); // 制作纯色位图 FCObjImage imgCover (img.Width(), img.Height(), 32) ; FCPixelFillColor cmdFillCr(m_cr) ; imgCover.SinglePixelProcessProc (cmdFillCr) ; imgCover.AppendAlphaChannel (imgAlpha) ; //imgCover.Save("D:\\te.bmp"); img.CombineAlphaImg (imgCover) ; //img.Save("D:\\te.bmp"); }