举例如下:
/*
- 改变调色板为一种颜色
- 输入参数:
- color: 颜色值,格式为0xAARRGGBB /AA为透明度/
*/
red = (color >> 19) & 0x1f;
green = (color >> 10) & 0x3f;
blue = (color >> 3) & 0x1f;
color = (red << 11) | (green << 5) | blue; // 格式5:6:5
VD[0~23],我们开发板只用了16位。frambuffer内存大小为2402320
硬件时序学习:
VCLK:每来一个时钟就向下移动一个像素。
VD0~VD23:数据宽度,但是我们只用了16位。
VLINE:(HYSNC,行同步型号,水平方向的,从上一行的行尾调到下一行的行首),
VSYNC:(垂直同步信号,从最后一行行尾跳转到第一行的行首)
VDEN:有效才打印颜色
每一个像素就是一个点,每个像素用多少位来表示颜色。像素深度是用多少位来表示颜色,如果是16bpp,那么像素深度就是16,
当使用像素深度是16bpp的时候,就只需要把颜色取出来组成16位就可以了,组成方法上面就4行代码所写的,32位的color第四字节代表透明度,第三字节代表红色,第二字节代表绿色,第一字节代表蓝色,我们取出红色的高五位,绿色的高六位,蓝色的高五位
然和组合成一个16位的数据刚好和数据带宽能够吻合。(数据宽度是24位,这里我们用16bpp就够了,其实24bpp应该也可以,只是这样造成系统负担更重,而得不偿失)。
那么当使用像素深度为8pp时候,像素深度和我们的带宽不一致,我们的颜色要用16位表示,如果直接用上肯定不可能,那我们就可以选择用调色板,调色板中存放了256种16bpp的颜色,这时候我们color存放的就不是真实的颜色值了,而是存放的是调色板中256种颜色的索引,成线性关系一一对应,这样我们大大减轻了系统的负担。用16bpp还是8bpp这得取决实际情况,16bpp肯定比8pp清晰,但同时带来的负荷也更加重。
下面是分析的更加详细,上面红色部分是自己总结了一下。
对于一个显示设备,数据的更新率正比于画面的像素数和色彩深度的乘积。在嵌入式Linux系统 中,受处理器资源配置和运算能力的制约,当使用大分辨率显示时(如在一些屏幕尺寸较大的终端上,往往需要640×480以上),需要降低显示的色彩深度。 否则,由于数据处理负担过重会造成画面的抖动和不连贯。这时,调色板技术将发挥重要作用。ARM9内核的S3C2410在国内的嵌入式领域有着广泛的应用,芯片中带有LCD控制器,可支持多种分辨率、多种颜色深度的LCD显示输出。在此,将S3C2410的调色板技术,以及嵌入式Linux系统下调色板显示的实现方法进行分析。
1 S3C2410调色板技术概述
1.1 调色板的概念
在计算机图像技术中,一个像素的颜色是由它的R,G,B分量表示的,每个分量又经过量化,一个像素总的量化级数就是这个显示系统的颜色深度。量 化级数越高,可以表示的颜色也就越多,最终的图像也就越逼真。当量化级数达到16位以上时,被称为真彩色。但是,量化级数越高,就需要越高的数据宽度,给 处理器带来的负担也就越重;量化级数在8位以下时,所能表达的颜色又太少,不能够满足用户特定的需求。
为了解决这个问题,可以采取调色板技术。所谓调色板,就是在低颜色深度的模式下,在有限的像素值与RGB颜色之间建立对应关系的一个线性表。比 如说,从所有的16位彩色中抽取一定数量的颜色,编制索引。当需要使用某种彩色时,不需要对这种颜色的RGB分量进行描述,只需要引用它的索引号,就可以 使用户选取自己需要的颜色。索引号的编码长度远远小于RGB分量的编码长度,因此在彩色显示的同时,也大大减轻了系统的负担。
以256色调色板为例,调色板中存储256种颜色的RGB值,每种颜色的RGB值是16位。用这256种颜色编制索引时,从OOH~FFH只需 要8位数据宽度,而每个索引所对应的颜色却是16位宽度的颜色信息。在一些对色彩种类要求不高的场合,如仪表终端、信息终端等,调色板技术便巧妙地解决了 数据宽度与颜色深度之间的矛盾。
1.2 S3C2410中的调色板
ARM9核的S3C2410芯片可通过内置的LCD控制器来实现对LCD显示的控制。以TFT LCD为例,S3C2410芯片的LCD控制器可以对TFT LCD提供1位、2位、4位、8位调色板彩色显示和16位、24位真彩色显示,并支持多种不同的屏幕尺寸。
S3C2410的调色板其实是256个16位的存储单元,每个单元中存储有16位的颜色值。根据16位颜色数据中,RGB分量所占位数的不同, 调色板还可以采取5:6:5(R:G:B)和5:5:5:1(R:G:B:1)两种格式。当采用5:6:5(R:G:B)格式时,它的调色板如表1所示。
表1中,第一列为颜色索引,中间三列是R,G,B三个颜色分量对应的数据位,分别是5位、6位和5位,最后一列是对应颜色条目的物理地址。当采用5:5:5:1(R:G:B:1)格式时,R,G,B三个颜色分量的数据位长度都是5位,最低位为1。
用户编程时,应首先对调色板进行初始化处理(可由操作系统提供的驱动程序来完成),赋予 256色调色板相应的颜色值;在进行图像编程时,可以将图像对象赋予所需的颜色索引值。程序运行时,由芯片的LCD控制器查找调色板,按相应的值进行输 出。S3C2410芯片图像数据输出端口VD[23:O]有24位,当使用不同的色彩深度时,这24位数据可以表示一个或多个点的颜色信息
————————————————
版权声明:本文为CSDN博主「HeroKern」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_21792169/article/details/50363538
来源:CSDN
作者:Castle_in_sky
链接:https://blog.csdn.net/qq_37689106/article/details/103536967