// when blitting from a monochrome DC to a color DC,
// the color black in the source turns into the destination's text color,
// and the color white in the source turns into the destination's background color.
// If you blit from a color DC to a monochrome DC,
// then all pixels in the source that are equal to the background color will turn white, and all other pixels will turn black.
// In other words, GDI considers a monochrome bitmap to be black pixels on a white background.
static void DrawTransBmp( HDC hDst, HBITMAP hImg, COLORREF clrTran )
{
COLORREF colorOldFront;
COLORREF colorOldBg;
BITMAP bmp;
GetObject( hImg, sizeof( bmp ), &bmp );
HDC hForeDC = ::CreateCompatibleDC( hDst );
::SelectObject ( hForeDC, hImg );
//prepare mask dc
HDC hDCMask = CreateCompatibleDC ( hDst );
// MSDN: When a memory device context is created, it initially has a 1-by-1 monochrome bitmap selected into it.
// If this memory device context is used in CreateCompatibleBitmap, the bitmap that is created is a monochrome bitmap.
HBITMAP hBmpMask = CreateCompatibleBitmap( hDCMask, bmp.bmWidth, bmp.bmHeight );
::SelectObject ( hDCMask, hBmpMask );
::SetBkColor( hForeDC, clrTran ); //Set clrTran as blackground color
::BitBlt( hDCMask, 0, 0, bmp.bmWidth, bmp.bmHeight, hForeDC, 0, 0, SRCCOPY ); //monochrome, background color is white
//mask the foreground
::SetBkColor( hForeDC, RGB(0,0,0) );
::SetTextColor( hForeDC, RGB(255,255,255) );
::BitBlt( hForeDC, 0, 0, bmp.bmWidth, bmp.bmHeight, hDCMask, 0, 0, SRCAND );
//mask the background
colorOldBg = ::SetBkColor( hDst, RGB(255,255,255) );
colorOldFront = ::SetTextColor( hDst, RGB(0,0,0) );
::BitBlt( hDst, 0, 0, bmp.bmWidth, bmp.bmHeight, hDCMask, 0, 0, SRCAND );
//or foreground and background
::BitBlt( hDst, 0, 0, bmp.bmWidth, bmp.bmHeight, hForeDC, 0, 0, SRCPAINT );
//recover hDst color of background and foreground
::SetBkColor( hDst, colorOldBg );
::SetTextColor( hDst, colorOldFront );
//release object
::DeleteDC( hDCMask );
::DeleteDC( hForeDC );
::DeleteObject( hBmpMask );
}
相关推荐
java下载google切片地图
java程序下载google影像图,代码下载粘贴就可以使用,下载格式为瓦片资源,可以用nginx代理为离线地图服务。
透明位图的三种做法(转)
http://www.handytech.cn/main/ArticleShow_38.htm 在编程中我们都希望程序的界面能够尽可能的美观,因此可以在程序中使用位图资源。但是位图是一个矩形阵列,在显示时总是以矩形形式显示,有什么方法能够让位图也显示成为不规则式样呢(即位图
关于位图背景色透明化的实现
实现透明位图,有一个知识点必须要提前知道,那就是: 如果一个单色位图向彩色位图转换,那么单色位图为1的部分(也就是白色部分),会转换为彩色位图的背景色,单色位图为0的部分(黑色部分),会转换为彩色位图的前景色。 如果一个彩色位图向单色位图转换,那么彩色位图的背景色转换到单色位图中则为1(白色),其他的则转换为0(黑色)。 当然上面的1和0都是指bit位的值,还有这些转换是在设备上下文间的块
使用BitBlt实现位图背景透明
mfc 绘制透明位图,BitBlt 函数SRCINVERT SRCAND模式详细说明
MFC 绘制透明背景位图
// 显示透明背景的位图 // 显示透明背景的位图 BOOL CSnowDlg::TransBit(CDC* dcSnow,CDC *dcDest,int pos_x,int pos_y) { // 创建空白DC CDC dcImg; CBitmap bmp; bmp.CreateCompatibleBitmap(dcSnow,32,32); dcImg.CreateCompatibl
关于BMP位图透明通道的详解制作教程, 教你输出透明的BMP位图
BMP支持透明比较常见的方法有两种: 一种是32位图,直接就可以是透明的,还可以是半透明效果,一般都是用PNG转成的,或者在保存图象时选择32位。 第二种就是把想透明的地方颜色设成255.255.0,但是有缺点就是不是所有软件都支持设透明色,而且软件透明部分的设定颜色也不一样,另外它不支持半透明。 32位的BMP,带一个ALPHA通道,在ALPHA通道里你要的地方是白色,不要的是黑色,就可以...
VC++ 的 CImageList 绘制背景透明的位图
程序效果图
android view为什么被绘制多次,Android SurfaceView多次绘制位图
我正在尝试将一个位图绘制到surfaceView中我可以成功绘制但是我需要根据其他一些用户移动在屏幕上移动该位图但是当我设置时canvas.drawColor(Color.TRANSPARENT);canvas.drawBitmap(bitmap, left, top, null);它在屏幕中多次绘制相同的位图 .但是当我这样做的时候canvas.drawColor(Color.GREEN);ca...
MFC将bmp图像设为背景 接着是控件背景透明
1.在ResourseView里添加文件夹,命名为Bitmap 2.将要添加的bmp图像文件拷贝到工程文件res目录中 3.在Bitmap里插入Bitmap资源从res目录中选取刚加入的Bitmap,并命其ID为IDB_BITMAP1(随意) 4.修改CMYDlg::OnPaint()如下: else { // 屏蔽 CDialog::OnPaint();
VC中的位图透明
1、VC6中,需要自己写函数代码 声明: void TransparentBlt( CDC* hdcDest, // 目标DC int nXOriginDest, // 目标X偏移 int nYOriginDest, // 目
Edit控件中字体、颜色、的局部改变及背景的改变
<br />http://hi.baidu.com/%D0%A1%C2%DF%BC%AD/blog/item/0a988d3965f1112cb9998f38.html<br /> <br />=以下来自CSDN、vckbase、百度空间、百度知道=<br />利用CFontDialog和CColorDialog两个类创建两个对话框,使选择的字体大小、类型和字体的颜色应用到EDIT中<br />。<br /> CFontDialog fontDlg; <br /> if (fontDlg.DoModal
C语言TransparentBlt函数,技术分享 - 使用TransparentBlt函数实现绘制透明位图
背景在自己本科的时候,喜欢用 VC6.0 写一些小游戏来锻炼自己的编程水平。那些小游戏的游戏画面绘制都是使用Windows提供的GDI(图形设备接口)函数实现的,并没有调用现成的游戏引擎。所以,使得自己对GDI函数比较熟悉,能用它开发各式各样的小游戏。其中,那些小游戏都会用到的一个关键技术,便是透明位图的绘制。现在,我把之前自己开发小游戏时,绘制透明位图的方法总结一下,分别为大家介绍一下三种实现方...
VC 控件背景透明、文字背景透明
Visual C++ 开发实战宝典 功能:位图上显示文字,背景透明。 void CP400Dlg::OnPaint() { 。。。。 CBitmap bmp; bmp.LoadBitmap(IDB_YCH); BITMAP bmInfo; bmp.GetBitmap(&bmInfo); int nBmpWidth,nBmpHeight; nBmpWidth
c语言创建一个透明的窗口,二级C语言辅导:绘制“透明”位图
绘制“透明”位图是指绘制某一位图中除指定颜色外的其余部分,我们称这种颜色为“透明色”。通过将位图的背景色指定为“透明色”,在绘制时,不绘制这部分背景,而仅绘制图像,这样就可以将位图中图像透明地绘制到窗口上。绘制“透明”位图的关键是创建一个“掩码”位图(mask bitmap),“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。在Windows编程中,绘图都要用到设备描述表,我们需创建两个内...
Delphi GDI对象之绘制位图
http://www.cnblogs.com/pchmonster/archive/2012/07/06/2579334.html 绘制位图(Drawing Bitmaps) 绘制位图听起来似乎很难,然而如几次所见到的那样,绘制位图非常容易。TCanvas类具有几种方法绘制位图,最常用的方法是Draw方法,这种方法只是在画布上指定位置绘制位图。用户已经见过几个这样的例子。下面是简短的例...
6.VC(ui)-MFC下实现透明位图
我们在进行程序的界面设计时,常常希望将位图的前景显示在界面上,而将位图的背景隐藏起来,将位图与界面很自然的融合在一起,本文介绍了透明位图的制作知识,并将透明位图在一个对话框中显示了出来。 直接上图:原图:Demo效果图: 步骤如下: 1、设置待显示位图的背景颜色,也就是
透明显示位图
方法1:使用API TransparentBlt。 方法2:比API要快一点 void TransparentBltImage(HDC hdcDest,int nXOriginDest,int nYOriginDest,int nWidthDest,int nHeightDest,HDC hdcSrc,int nXOriginSrc,int nYOriginSrc,
1325




被折叠的 条评论
为什么被折叠?



