打印

如何让位图显示为透明?

[复制链接]
2850|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 huhu2009 于 2010-4-10 08:59 编辑

不用uc/Gui里的memdev,读位图,将像素直接逐个显示在屏幕上,如何才能让位图显示为透明呢?

如:下面位图,电话那个弧形是白色,然后是绿色,周围有个白色的边框,现在窗口背景为黑色,则需使这个白色边框呈现为黑色才算“透明”,但电话的白色却不能画成黑色。怎么做呢,请高手指点。

call.JPG (4.49 KB )

call.JPG
沙发
huhu2009|  楼主 | 2010-4-11 20:28 | 只看该作者
没有人知道么……即使撇开uc/Gui不管,谈谈思路也行啊

使用特权

评论回复
板凳
秋天落叶| | 2010-4-11 21:01 | 只看该作者
没做过这方面的,不过很有兴趣,帮顶一下,期待高手

使用特权

评论回复
地板
香水城| | 2010-4-12 09:43 | 只看该作者
不要把透明色定义为白色即可。

使用特权

评论回复
5
yuyixuanta| | 2010-4-12 12:18 | 只看该作者
你这种需要做一个掩码图,自己搜一下这个关键词,很容易的。

使用特权

评论回复
6
stmsky| | 2010-4-12 18:34 | 只看该作者

使用特权

评论回复
7
huhu2009|  楼主 | 2010-4-19 21:45 | 只看该作者
是6楼的那个效果,你特意做了处理、还是只把背景色设置为白色?如果是后者的话,换个背景就能看得出来了

使用特权

评论回复
8
huhu2009|  楼主 | 2010-4-19 21:47 | 只看该作者
5# yuyixuanta 如果做掩码图的话,就又多出一个图片来,需要更多的空间来存放它们

使用特权

评论回复
9
huhu2009|  楼主 | 2010-4-19 21:48 | 只看该作者
4# 香水城 不太明白……

使用特权

评论回复
10
kiton_law| | 2010-4-20 21:35 | 只看该作者
本帖最后由 kiton_law 于 2010-4-20 21:38 编辑

一般有三种方式
1.通过三元光栅操作,先做一个掩码位图,对应图片需要显示的部分填充为全0(颜色是几位就填几位),对应图片透明部分填充为全1,图片中需要透明的部位填充为全0,先用掩码图和目标表面AND,然后用图片和目标表面OR
2.通过透明色表面过滤,透明表面是个单一颜色的图片,你要显示的图片的透明部分颜色应该和透明表面相同,先将透明色表面和目标表面XOR,再将图片与目标XOR,图片中与透明色表面同色的部分将会透明
3.通过透明色判断,设置透明色,在用图片填充目标表面时,判断图片象素是否和透明值相同,如果相同就不填充

1方法需要额外的和图片一样大的存储空间来存储掩码,并且每幅图片都需要一个掩码图,但是图片不透明的部分可以使用任何颜色,老式显示设备常用(因为一般不支持硬件透明表面)

2方法需要的空间稍小,一个透明表面可以用于过滤所有使用相同透明色的图片,但限制就是你所有用该表面过滤的图片都要使用相同的透明色,而且图片显示区域内将不能使用透明色,但这个不是大问题。在有硬件加速的图形处理器中,这种方法常用,它们一般都有一个硬件的过滤表面(你只需要设置表面的颜色值)
前两种方法都需要在读取目标表面象素值上有速度优势,否则就是出力不讨好。

3方法需要空间最小,并且无需提取目标表面的值(判断图片象素是否为透明值时是不需要目标数据的),适合空间小并且读取目标表面不便的情况下(比如使用MCU控制通过端口操作显存的LCD),但速度最慢,而且图片的显示部分也不能用透明色。

这几种方法各有优势,看具体硬件情况选择。
当然还有其他方式,但无非就是光栅操作的顺序和模式不同。
但在MCU的应用中方法3无疑最有前途,因为速度要求不高,而且资源有限,我都是使用第3种方法的,1方法和2方法一般在高级的图形引擎中才使用。

使用特权

评论回复
11
xwj| | 2010-4-20 22:37 | 只看该作者
LS讲得很好,Windows很多年前开始就是将粉红色作为视频透明色的,只要是这个颜色,就直接显示动态视频部分。

使用特权

评论回复
12
kiton_law| | 2010-4-21 09:53 | 只看该作者
其实还有一种方法,就是做alpha混合,不但可以实现透明,还能实现半透明,但是。。。。如果没有硬件支持的话还是算了吧

使用特权

评论回复
13
IJK| | 2010-4-21 10:18 | 只看该作者
谢谢,学习了

使用特权

评论回复
14
llf021421| | 2010-10-27 20:09 | 只看该作者
谢谢,学习了!

使用特权

评论回复
15
pkat| | 2010-10-27 22:43 | 只看该作者
分析的很透彻

使用特权

评论回复
16
STARM| | 2010-10-28 09:07 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

163

帖子

1

粉丝