Chinaunix首页 | 论坛 | 博客
  • 博客访问: 173565
  • 博文数量: 22
  • 博客积分: 1586
  • 博客等级: 上尉
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-06 10:32
文章分类

全部博文(22)

文章存档

2015年(2)

2014年(1)

2013年(2)

2012年(5)

2011年(1)

2010年(11)

我的朋友

分类: 其他平台

2015-03-12 10:39:31


转:http://blog.csdn.net/wchm_seu/article/details/5595240
rgb颜色空间对于搞视频图像编程的程序员应该并不陌生。一类称为rgb1、rgb4、rgb8等调色板格式,对于这几类格式,数据结构后面往往会带有一个调色板,图像中的像素值并不真正代表颜色值,而是代表颜色值的索引号,通过索引号查找到调色板上的位置来得到实际的颜色值。另一类则是真正的颜色值格式,典型的有rgb16、rgb24、rgb32等。对于这类具体的格式再次就不做具体的介绍,有兴趣的可以参考相关的资料。这里介绍一些大家在利用rgb格式可能遇到的问题。

   第一个问题是关于变量pitch的问题,通俗的说这个变量表示图像中一行像素所占存储空间的大小,单位是字节byte。假设每行像素个数为width。

   对于rgb16,每个像素为两个字节,pitch=2*width

   对于rgb32,每个像素为4个字节,pitch=4*width

   对于rgb24,情况要复杂一点,每个像素为3个字节,按照计算,pitch应该为3*width。但是这里要考虑到存储对齐问题问题,也就是说,每一行存错所需要的空间一般是4字节的整数倍,因此,这里pitch=(24*width+31)/32*4。即所占存储空间不足4字节整数倍的,则进行补齐。

  

   第二个这里要说的问题,是关于rgb32格式,它除了有24位用作rgb颜色分量的存储,另外还有8位用作alpha通道或是不用,这里主要讨论的是用作alpha通道。

     假设如上一张rgb32位图片,现在想将它作为一个logo加到另一张背景上面,而logo的黑色部分不能重叠到背景图像上,需要将其透明化,这个时候我们则可以对这张图片的alpha通道进行处理,若图片像素点的r=0,g=0,b=0即为黑色点的话,该像素相应的alpha通道值设为255,否则alpha通道值为0。

    其实这里用到了公司A=B*(1-x/255)+C*(x/255)

A表示合成的像素值,B为LOGO像素值,C为背景像素值。从该公式可以看出,我们可以利用Alpha通道对LOGO的每个像素的透明度进行精确的控制。


阅读(2080) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~