图片透明效果处理

 http://blog.csdn.net/virtualjxc/archive/2007/09/19/1791063.aspx

 由于所有的图文件都是以一个四方矩形的形式来存储的,但有时我们可能会需要把一张怪物图片贴到窗口的背景上,而在这种情况下我们如果直接进行贴图的话,就会把这张图片的背景也一起贴到窗口背景图片中去,这当然不是我们想要的,所有我们就有必要把要贴的图片的不需要的部分给去了,就是所谓的图片透明效果处理。

          主要就是利用BitBlt()贴图函数以及Raster值的运算来将图片中不必要的部分去掉(又称去背),使得图中的主题可以与背景图完全融合。制作透明效果有多种方法,但基本上都是利用贴图时不同的Raster运算,通过转换而最后产生相同的透明效果。在这里先来介绍一种透明运算的方法: 

      首先得准备一张位图:

图中左边的图是要去背并贴到背景上的前景上的前景图,右边的黑白图称为“屏蔽图”,在透明的过程中会用到它。把要去背的位图与屏蔽图合并成同一张图,透明的时候再按照需要来进行裁切。可以把它分成两张图,但这样程序就得运行两次图文件的加载的操作。下面的贴图步骤:

   (1):将屏蔽图与背景图做“AND"(Raster值为SRCAND)运算,贴到目的地DC中;

  (2):将前景图与背景图作“OR”(Raster值为SRCPAINT)运算,贴到目的DC中。

为什么这样就会产生透明的效果呢?

这是因为:白色的RGB值为(255,255,255),二进制即为  111111111111......

黑色的RGB值为(0,0,0),龙江二进制即为  000000000000......

运算过程:

1:屏蔽图与背景图做“AND”运算

(1)屏蔽图中的图中的黑色部分与背景图作”AND“运算:

            000000........---------------------屏蔽图中黑色图点的颜色值

AND)011010.......---------------------背景图中彩色图点的颜色值

           000000.....------------------------运算后为黑色

(2)屏蔽图中的白色部分与背景图做”AND“运算:

             11111........---------------------屏蔽图中白色图点的颜色值

AND)011010.......---------------------背景图中彩色图点的颜色值

             011010.....------------------------运算后还是原来背景图的色彩

2,前景图与背景图作”OR”运算:

(1)前景图中的彩色部分与上面运算后的图作“OR”运算:

            101011........---------------------前景图中彩色图点的颜色值

OR) 000000.......---------------------背景图中变成黑色图点的颜色值

             101011.....------------------------运算后变成前景图的色彩

(2)前景图中的黑色部分与上图运算后的图作“OR”运算:

             000000........---------------------前景图中黑色图点的颜色值

OR)  101010.......---------------------背景图中彩色图点的颜色值

             011010.....------------------------运算后还是原来背景图的色彩

经过这一运算后所显示的画面就是所需要的透明图了。

Note;

BOOL BitBlt( HDC  目的DC ,//贴图

                       int  目的DC X坐标,  int  目的DC Y坐标,  int  贴到目的DC的宽度,

                       int   贴到目的DC的高度,   HDC  来源DC,   int   来源DC X坐标,   int   来源 DC Y坐标,

                      DWORD   贴图方式);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值