CreateHatchBrush只有预定义的六种,虽然可以定义颜色,可是不行。
CreatePatternBrush倒是可以用位图来创建任意图案画刷了,但是不能自定义颜色,也不行。我不可能为每种颜色都创建一个位图资源的。
看起来只有CreateBrushIndirect,可是试了又试总是不成功,有谁知道该怎么做吗?
CreatePatternBrush倒是可以用位图来创建任意图案画刷了,但是不能自定义颜色,也不行。我不可能为每种颜色都创建一个位图资源的。
看起来只有CreateBrushIndirect,可是试了又试总是不成功,有谁知道该怎么做吗?
要不用GDI+,GDI+能满中你的要求的。
GDI+,好啊,能说详细点吗?
怎么做?CreateBitmap和CreateBitmapIndirect都没有看到能有设置颜色的地方。
这样就等于自定义颜色......
这两步不太清楚,能写出代码看看吗?
{
BITMAP bm;
Bitmap.GetObject(sizoef(BITMAP),&bm); CBitmap maskBmp,TranBmp;
//Create掩码图
maskBmp.CreateBitmap(bm.bmWidth,bm.bmHeight,1,1,NULL);
//Create目标位图
TranBmp.CreateCompatibleBitmap(pDC,bm.bmWidth,bm.bmHeight);
//Create 3个兼容DC
CDC MemDC1,MemDC2,MemDC3;
MemDC1.CreateCompatibleDC(pDC);
MemDC2.CreateCompatibleDC(pDC);
MemDC3.CreateCompatibleDC(pDC);
//MemDC1选入准备好的位图
CBitmap *pOld1 = (CBitmap *)MemDC1.SelectObject(&Bitmap);
//MemDC2选入掩码图
CBitmap *pOld2 = (CBitmap *)MemDC2.SelectObject(&maskBmp);
//MemDC3选入目标图
CBitmap *pOld3 = (CBitmap *)MemDC3.SelectObject(&TranBmp);
//目标图涂上需要的颜色
CBrush brush(fgColor);
CRect rc(0,0,bm.bmWidth,bm.bmHeight);
MemDC3.FillRect(&rc,&brush);
//设置原图背景色(透明色)
MemDC1.SetBkColor(bgColor);
//造掩码图
MemDC2.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC1,0,0,SRCCOPY);
//now do it..
MemDC3.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC1,0,0,SRCINCERT);
MemDC3.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC2,0,0,SRCAND);
MemDC3.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC1,0,0,SRCINVERT);
//ok,clean up..
MemDC1.SelectObject(pOld1);
MemDC2.SelectObject(pOld2);
MemDC3.SelectObject(pOld3);
//Create your bmpbrush..
BmpBrush.CreatePatternBrush(&TranBmp);
}
=================================================================
信手写来,不知道有没有错,试试吧..
MemDC3.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC1,0,0,SRCINCERT);
MemDC3.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC2,0,0,SRCAND);
MemDC3.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC1,0,0,SRCINVERT);
汗,写错了一个英文,应为:
MemDC3.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC1,0,0,SRCINVERT);
MemDC3.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC2,0,0,SRCAND);
MemDC3.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC1,0,0,SRCINVERT);