您的位置:首页 > 其它

由掩码图想到的关于位图的一些问题

2010-11-18 16:23 302 查看
因为要做另一个项目,合作的部门同事发来邮件提到了个我没见过的东西:掩码图。百度了下,很少,好像貌似是游戏中使用的,用到了与或非的运算,接着查了下,这些运算主要是在程序中给位图做背景透明的。于是呢,我接着查了下,越查越没底,原来知道的东西好像一下不知道了,根本没办法解决现在的问题。算了,从头开始查起。

概念:
位图图像(bitmap):亦称为点阵图像或绘制图像, 是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成图样。每个像素的色彩信息由RGB组合或者灰度值表示。根据颜色信息所需的数据位分为1、4、8、16、24及32位等,位数越高颜色越丰富,相应的数据量越 大。其中使用1位表示一个像素颜色的位图因为一个数据位只能表示两种颜色,所以又称为二值位图。原来只有黑白和16色两种。后来微软加入了256色的格式。通常使用24位RGB组合数据位表示的的位图称为真彩色位 图。当放大位图时,可以看见赖以构成整个图像的无数单个方块。扩大位图 尺寸的效果是增多单个像素,从而使线条和形状显得参差不齐。然而,如果从稍远的位置观看它,位图图像的颜色和形状又显得是连续的。由于每一个像素都是单独染色的,您可以通过以每次一个 像素的频率操作选择区域而产生近似相片的逼真效果,诸如加深阴影和加重颜色。缩小位图尺寸也会使原图变形,因为此举是通过减少像素来使整个图像变小的。同 样,由于位图图像是以排列的像素集合体形式创建的,所以不能单独操作(如移动)局部位图。
例如:用大写字母“J”来展示点阵图
靠近看这个字母会像这个样子,这里我们用「X」与「.」这两个字來表示像素的格子:




用电脑的角度来看更接近下面这个样子,即上图中的「.」以0代替,「X」以1代替:
id="图片_x0020_2" o:spid="_x0000_i1026" type="#_x0000_t75" style='width:47.25pt;
height:118.5pt;visibility:visible;mso-wrap-style:square'>
o:title="22O{O)39HHICJRJZZKEM}I4" />
<!--[if !vml]-->

<!--[endif]--> o:spid="_x0000_i1025" type="#_x0000_t75" style='width:337.5pt;height:129.75pt;
visibility:visible;mso-wrap-style:square'>
o:title="[BJ0X%F(V}F)1NP]57ZFQXS" />
<!--[if !vml]-->

<!--[endif]-->
常见的位图文件有:jpg(有损压缩,没有alpha通道)、bmp(无损压缩,bmp是可以有alpha通道的的,32位 RGBA,32位BMP的RGBA的顺序不同也可能导致透明图像的透明通道不正确)、gif(GIF分为静态GIF和动画GIF两种,支持透明背景图像,只能显示256色,有损压缩,没有alpha通道)、.png(其中png8和png24的区别是:png8不支持alpha通道的半透明,png24支持alpha通道的半透明、每个点阵都有透明度的定义,最低32位真彩色。使用无损压缩)、.psd(无损压缩) 、.tif(无损和有损压缩都支持)、.rif

严格意义上讲,颜色数超过256色是有损压缩!

其中有一下几种:
RGB
位图颜色的一种编码方法,用红、绿、蓝三原色的光学强度来表示一种颜色。这是最常见的位图编码方法,可以直接用于屏幕显示。
CMYK
位图颜色的一种编码方法,用青、品红、黄、黑四种颜料含量来表示一种颜色。常用的位图编码方法之一,可以直接用于彩色印刷。
索引颜色/颜色表
位图常用的一种压缩方法。从位图图片中选择最有代表性的若干种颜色(通常不超过256种)编制成颜色表,然后将图片中原有颜色用颜色表的索引来表示。这样原图片可以被大幅度有损压缩。适合于压缩网页图形等颜色数较少的图形,不适合压缩照片等色彩丰富的图形。
Alpha通道
在原有的图片编码方法基础上,增加像素的透明度信息。图形处理中,通常把RGB三种颜色信息称为红通道、绿通道和蓝通道,相应的把透明度称为Alpha通道。多数使用颜色表的位图格式都支持Alpha通道。
请注意Alpha通道,是保存图像的透明度的,有两种:一种是只有两个值,0%和100%;另一种是0%~~100%。
详细的信息,而且我看了比较容易理解的是这位大哥的。以下内容来自网络:
有关通道的教程很多,也有许多讲解如何应用Alpha通道的文章。但比较深入地讲解Alpha通道的几乎没有看到。
ps中打开一幅图片(以.jpg为例),就会自动生成三个通道:红、绿、蓝通道。这三个通道叫颜色通道。
在图片上做个选区,然后用:选择/存储选区命令,把选区保存起来。这时,你进入通道面板,会发现多出来一个通道。这就是Alpha通道。看来,Alpha通道的功能就是用来“存储选区”的。那么Alpha通道“存储选区”,是用的什么手段来实现的呢?许多人会想,Alpha通道是记录下“选区的位置信息”,来保存选区的。但是,这个理解是片面的。Alpha通道不仅要用记录选区的位置信息,还要记录选区像素的“透明度”来保存选区的。有点抽象是吧?但事实如此。
Alpha通道确实给人有点看不见、摸不着的感觉。因为它的作用手段很特别。
我们在图片上,用选取工具,羽化20,做个选区,保存选区,然后再看Alpha通道,你会发现Alpha通道图发生了变化。为什么?因为选区被羽化了的关系。做选区时用羽化的目的,是为了“晕化”选区边缘。如果Alpha通道只记录选区的位置信息,那怎么来实现“晕化”的作用呢?而要实现“晕化”所用的机制 是:根据操作者的设置,自动在Alpha通道图上,生成一个作用图。这个作用图,用灰阶值0-255共256级分别与0%-100%(透明度)对应。透明 度100%时(对应255灰,白色)表示该像素完全显示,透明度0%时(对应0灰,黑色)表示该像素完全不显示,其他透明度1%-99%时将按比例地进行 “比例透明显示”。没有羽化时,作用图上只有225白和0黑。这个作用图,就是Alpha通道所记载的“透明度”信息。
你在图片的Alpha通道上执行:选择/载入选区命令后,然后在图层,Ctrl+j,你将会在新图层上看到一个边缘被羽化的图象。所以你在新建的Alpha通道图上,可以用画笔,用255白色涂抹需要的区域,用0黑色涂抹不需要的区域,用不同灰度的灰色涂抹需要部分透明的区域。透明的程度全由你所选灰色的灰度来决定。
你在图片的Alpha通道上执行:选择/载入选区命令后,然后在图层,Ctrl+j,你将会在新图层上看到,你按透明度的原理设计出的Alpha通道图所有的表现。
理解这个原理后,你就会认识,Alpha通道并不难理解。
色彩深度
色彩深度又叫色彩位数,即位图中要用多少个二进制位来表示每个点的颜色,是分辨率的一个重要指 标。常用有1位(单色),2位(4色,CGA),4位(16色,VGA),8位(256色),16位(增强色),24位和32位(真彩色)等。色深16位 以上的位图还可以根据其中分别表示RGB三原色或CMYK四原色(有的还包括Alpha通道)的位数进一步分类,如16位位图图片还可分为 R5G6B5,R5G5B5X1(有1位不携带信息),R5G5B5A1,R4G4B4A4等等。
(以上内容来自百度)
位图是一种数字格式存储照片或图片的方法,它将照片中每行每列的像素转化为二进制数据的矩阵,矩阵每个单元格的数据代表图片显示的每个像素。所以位图是矩形的。
以上是相对于游戏而言的解释,看了下解释,大概的意思是游戏中的人物的动作不是矩形的,没办法透明,而程序中只能对矩形的图像做透明处理,所以做个掩码图使人物矩形化,这样人物在场景中走动的时候对场景图就没有破坏,下一动作开始后,就去掉上一个动作的掩码图,替换下一个动作的掩码图。已经尽力去理解了。
大致的步骤是:掩码图和背景图与运算,然后原图和运算后的图进行或运算。
然后又问了下以前的一位牛人,具体结果如下:
与的结果应该是掩码空白的部分背景图会被切掉 ,也就是说,只有掩码中纯白色的部分会露出背景图,其他部位是黑色的,与操作的特性是任何数与0=0,任何数与1=原来的数
所以,黑色各位是纯0,所以任何颜色与它相与都变成黑色,白色各位是纯1,所以任何颜色与它相与都维持原色。或就是对应白色的部分变成白色,对应黑色的部分不变。而且与后,原来的图和掩码图只要不被覆盖就始终存在。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: