我有一张图片,它的底色是粉红色,(其实粉红色就是我所说的透明色),
我现在想在DC上操作,怎么可以去除粉红色,而图片的其他内容全部保持不变!
我现在想在DC上操作,怎么可以去除粉红色,而图片的其他内容全部保持不变!
解决方案 »
- VC6.0不能断点调试
- 一个串口的基础问题
- 高分求算法:如何判断空间三点是顺时针还是逆时针方向
- CListCtrl 控件,当view属性为report时,InsertItem(1,"1"),插入时,为什么在1的前面有一个 小方框 ,怎样去掉?
- 视频捕捉得到的图像不连续怎么办? --着急,在线等
- 如何利用VC读取BMP图片中每一个像素的R,G,B颜色分量,并输出保存成*.txt文件(是作业,紧急!!!最好提供源程序,以便研究)
- 高分:資源管理器和iexplorer是不是跟普通exe不同?為什麽我發送WM_CLOSE給它們沒反應呢?
- 断点无效
- 请问AfxGetApp()是干什么用的?
- 谁可以用SDK的方法在对话框中生成一个IE控件?
- 怎么分别得到emf文件中每一条字符串记录的当前font?
- 用MFC开发的工具栏形式的窗口activex时,在wizard中应该从哪个窗口类继承?
BOOL TransparentBlt(
int xDest,
int yDest,
int nDestWidth,
int nDestHeight,
CDC* pSrcDC,
int xSrc,
int ySrc,
int nSrcWidth,
int nSrcHeight,
UINT clrTransparent //透明色
);
那么在DC操作中,怎么实现将透明色替换成白色(我指的是不用像素级的操作哦),盼答复!!!
/*用于没有掩码图,只有指定透明色,可以进行伸缩*/
void CCommon::DrawTransBitmap( HDC hdcDest, // 目标DC
int nXOriginDest, // 目标X偏移
int nYOriginDest, // 目标Y偏移
int nWidthDest, // 目标宽度
int nHeightDest, // 目标高度
HDC hdcSrc, // 源DC
int nXOriginSrc, // 源X起点
int nYOriginSrc, // 源Y起点
int nWidthSrc, // 源宽度
int nHeightSrc, // 源高度
UINT crTransparent // 透明色,COLORREF类型
)
{
HBITMAP hOldImageBMP, hImageBMP = CreateCompatibleBitmap(hdcDest, nWidthDest, nHeightDest); // 创建兼容位图
HBITMAP hOldMaskBMP, hMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); // 创建单色掩码位图
HDC hImageDC = CreateCompatibleDC(hdcDest);
HDC hMaskDC = CreateCompatibleDC(hdcDest);
hOldImageBMP = (HBITMAP)SelectObject(hImageDC, hImageBMP);
hOldMaskBMP = (HBITMAP)SelectObject(hMaskDC, hMaskBMP);
// 将源DC中的位图拷贝到临时DC中
if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc)
BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hdcSrc, nXOriginSrc, nYOriginSrc, SRCCOPY);
else
StretchBlt(hImageDC, 0, 0, nWidthDest, nHeightDest,
hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, SRCCOPY);
// 设置透明色
SetBkColor(hImageDC, crTransparent); // 生成透明区域为白色,其它区域为黑色的掩码位图
BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY);
// 生成透明区域为黑色,其它区域保持不变的位图
SetBkColor(hImageDC, RGB(0,0,0));
SetTextColor(hImageDC, RGB(255,255,255));
BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND); // 透明部分保持屏幕不变,其它部分变成黑色
SetBkColor(hdcDest,RGB(0xff,0xff,0xff));
SetTextColor(hdcDest,RGB(0,0,0));
BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);
// "或"运算,生成最终效果
BitBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCPAINT);
SelectObject(hImageDC, hOldImageBMP);
DeleteDC(hImageDC);
SelectObject(hMaskDC, hOldMaskBMP);
DeleteDC(hMaskDC);
DeleteObject(hImageBMP);
DeleteObject(hMaskBMP);
}
ImageList_DrawIndirect