CMenu设置ps 位图 不能改,但ps 位图 不能改背景是黑色的,怎么改成透明

> MFC基础-怎样贴一张圆型的位图
MFC基础-怎样贴一张圆型的位图
&&& 如果你要做有关棋类的东东又恰好有两张漂亮棋子的位图,可惜两张位图是方型的,后面有背景..在Delphi里只要将背景色设成透明就行了,可在MFC里怎样实现把背景去掉只显示圆形的棋子呢?
&&& 实例如下:&&& //To invoke this function with the position
&&& BOOL IsBlack = TRUE;//set the black stone defautly&&& CBitMap m_bStoneB;&&& CBitMap m_bStoneW;&&& //load bmp from resource&&& m_bStoneB.LoadBitmap(IDB_BLACKSTONE);&&& m_bStoneW.LoadBitmap(IDB_WHITESTONE);
&&& void CxxDlg::OnPutStone(CPoint point)&&& {&&& CDC *pDC = GetDC(); //Get Device Context&&& CBitmap *pOldB&&& CBrush *pOldB&&& CPen *pOldP
&&& if(pDC == NULL)&&&
&&& CDC&&& if (!dcimage.CreateCompatibleDC(pDC)) //Create MemDC&&&
&&& CR //Get th&&& rect.left = point.x - 25/3;&&& rect.right = point.x + 25/3;&&& rect.top = point.y - 25/3;&&& rect.bottom = point.y + 25/3;
&&& if(IsBlack) //judge whether stone is black&&& {&&& //Select blackstone in memory and select out oldbitmap&&& pOldBitmap = dcimage.SelectObject(&m_bStoneB);&&& CBrush br(RGB(0, 0, 0)); //set brush to black&&& CPen pen(PS_SOLID,1,RGB(0, 0, 0));//set pen to black&&& pOldPen=pDC-&SelectObject(&pen);//select in pen(black)&&& //and out oldpen
&&& pOldBrush = pDC-&SelectObject(&br);//select in brush(black)&&& pDC-&Ellipse(&rect);//draw a ellipse in defined rectangle&&& BITMAP&&& m_bStoneB.GetBitmap(&bm);//Get blackstone bitmap info
&&& //paint memory bitmap(blackstone) with the operator OR&&& pDC-&StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&&& &dcimage,0,0,bm.&&& mWidth,bm.bmHeight,SRCPAINT);&&& }&&& else //the same to draw whitestone bitmap&&& {&&& //select in whitestone and select out blackstone&&& pOldBitmap = dcimage.SelectObject(&m_bStoneW);&&& CBrush br(RGB(255, 255, 255)); //set white brush&&& CPen pen(PS_SOLID,1,RGB(255, 255, 255));//set white pen&&& pOldPen=pDC-&SelectObject(&pen);&&& pOldBrush = pDC-&SelectObject(&br);&&& pDC-&Ellipse(&rect);&&& BITMAP&&& m_bStoneW.GetBitmap(&bm);&&& //paint memory bitmap(whitestone) with the operator AND&&& pDC-&StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),
&&& &dcimage,0,0,bm.&&& mWidth,bm.bmHeight,SRCAND);&&& }
&&& dcimage.SelectObject(pOldBitmap); //select old bitmap&&& pDC-&SelectObject(pOldPen);//select old pen&&& pDC-&SelectObject(pOldBrush);//select old brush
&&& IsBlack = !IsB //switch to white or black&&& ReleaseDC(pDC);//relieve GDI resource(important)&&& }
本文地址 :
------分隔线----------------------------CMenu设置位图,但位图背景是黑色的,如何改成透明?
用SetMenuItemBitmaps为menu加图
TRANSPARENT参数&&颜色设为&位图的背景色
m_hImageList1=&ImageList_Create(93,24,ILC_COLOR24|ILC_MASK,1,0);&//
//加入事先作好的工具条位图IDB_BITMAP2&
HBITMAP&bBitMap=LoadBitmap(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDB_BITMAP1));
ImageList_AddMasked(m_hImageList1,&bBitMap,&RGB(255,255,255));//设置白色为透明色
ImageList_Add(&m_hImageList1,&bBitMap,NULL);&//AfxGetInstanceHandle()
//通过消息把位图加入到Toolbar中&
SendMessage(hWnd,&TB_SETIMAGELIST,&0,&(LPARAM)m_hImageList1);
参考,自己改改吧,
给CMenu加图标可能用CImageList吗
再顶一下。
引用&4&楼&rcbblgy&的回复:给CMenu加图标可能用CImageList吗
CMenu类不是有这个函数吗?可以设置菜单项位图的。
CMenu::SetMenuItemBitmaps();
Associates&the&specified&bitmaps&with&a&menu&item.&
BOOL&SetMenuItemBitmaps(
&&&UINT&nPosition,
&&&UINT&nFlags,
&&&const&CBitmap*&pBmpUnchecked,
&&&const&CBitmap*&pBmpChecked&
引用&7&楼&visualeleven&的回复:引用&4&楼&rcbblgy&的回复:
给CMenu加图标可能用CImageList吗
CMenu类不是有这个函数吗?可以设置菜单项位图的。
CMenu::SetMenuItemBitmaps();
Associates&the&specified&bitmaps&with&a&menu&item.
BOOL&SetMenuItemBitmaps(
UINT&nPositi……
SetMenuItemBitmaps需要的参数是CBitmap*,如何从CImageList获取CBitmap*&?
我是说,没解决
回复
即使是一小步也想与你分享2218人阅读
手机(102)
用透明替换特定的颜色从现有的位图透明位图
public Bitmap createTransparentBitmapFromBitmap(Bitmap bitmap,
int replaceThisColor) {
if (bitmap != null) {
int picw = bitmap.getWidth();
int pich = bitmap.getHeight();
int[] pix = new int[picw * pich];
bitmap.getPixels(pix, 0, picw, 0, 0, picw, pich);
int sr = (replaceThisColor && 16) & 0
int sg = (replaceThisColor && 8) & 0
int sb = replaceThisColor & 0
for (int y = 0; y & y++) {
for (int x = 0; x & x++) {
int index = y * picw +
int r = (pix[index] && 16) & 0
int g = (pix[index] && 8) & 0
int b = pix[index] & 0*/
if (pix[index] == replaceThisColor) {
if(x&topLeftHole.x) topLeftHole.x =
if(y&topLeftHole.y) topLeftHole.y =
if(x&bottomRightHole.x) bottomRightHole.x =
if(y&bottomRightHole.y)bottomRightHole.y =
pix[index] = Color.TRANSPARENT;
Bitmap bm = Bitmap.createBitmap(pix, picw, pich,
Bitmap.Config.ARGB_8888);
调用代码:
Bitmap bmp2= createTransparentBitmapFromBitmap(bmp,Color.MAGENTA);
imgView.setBackgroundColor(Color.TRANSPARENT);
imgView.setImageBitmap(bmp2);
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:588825次
积分:8566
积分:8566
排名:第2023名
原创:283篇
转载:64篇
评论:166条
(1)(3)(12)(7)(5)(1)(1)(2)(3)(4)(3)(1)(2)(3)(2)(2)(1)(2)(4)(4)(3)(4)(1)(2)(1)(2)(3)(3)(2)(16)(3)(2)(2)(2)(3)(6)(5)(6)(4)(6)(4)(2)(4)(4)(17)(3)(2)(3)(7)(5)(2)(2)(1)(1)(2)(7)(5)(2)(2)(5)(3)(6)(4)(4)(11)(2)(12)(14)(12)(10)(6)(4)(4)(1)(2)(2)(6)(5)(6)(5)(2)(8)}

我要回帖

更多关于 cdr位图怎么改颜色 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信