举例如下:

/*

  • 改变调色板为一种颜色
  • 输入参数:
  • 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

Linux LCD 驱动调色板原理相关推荐

  1. 七 linux LCD驱动代分析

    LCD驱动分析 原文地址: http://blog.csdn.net/woshidahuaidan2011/article/details/52054795 1.对LCD驱动添加设备信息 对lcd驱动 ...

  2. Linux LCD 驱动实验

    目录 Linux 下LCD 驱动简析 1 Framebuffer 设备 LCD 驱动简析 硬件原理图分析 LCD 驱动程序编写 运行测试 LCD 屏幕基本测试 设置LCD 作为终端控制台 LCD 背光 ...

  3. Linux LCD 驱动

    裸机 LCD 驱动编写流程如下: ①.初始化 I.MX6U 的 eLCDIF 控制器,重点是 LCD 屏幕宽(width).高(height). hspw. hbp. hfp. vspw. vbp 和 ...

  4. linux设备寄存器映射,linux LCD驱动 及 ARM 寄存器映射

    折腾了2天LCD驱动程序才发现系统其实已经移植了LCD驱动.设备名为/dev/fb0. 白折腾. 不过也有好处,搞了一遍基本了解LCD驱动的实现方法. 这里涉及到一个问题是如何把ARM寄存器地址空间映 ...

  5. Linux底层驱动编译原理 ,编译过程 以及 装载(树莓派)

    一.用户支配驱动工作的过程 上层应用调用open,read,write等标准C库函数 触发软中断:0x80 ,由用户态进入到内核态,发生系统调用 系统调用syscall,文件子系统会调用相应的syso ...

  6. linux lcd驱动调试 echo dev/fb0,LCD驱动程序 - osc_msmij2gf的个人空间 - OSCHINA - 中文开源技术交流社区...

    LCD驱动程序 假设 app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0 kernel: fb_open int fbidx = iminor ...

  7. JZ linux lcd驱动调试

    1.配置使用的屏文件,对应引脚 2.修改屏参数 struct lcdc_data lcdc_data = {.name = "gl0700",.refresh = 60,.xres ...

  8. 正点原子linux驱动教程,正点原子 手把手教你学Linux之驱动开发篇

    简 介 该课程是正点原子手把手教你学Linux系列课程,该课程配套开发板为正点原子alpha/mini Linux开发板. 手把手教你学Linux之驱动开发篇: 第1讲 Linux驱动开发与裸机开发区 ...

  9. STM32F103以SPI 驱动128*128的TFT彩屏,LCD驱动为ST7735s,程序使用CubeMX的HAL库开发方式,另外也做了标准库的程序移植

    0.  关于本文: 其实我一直都比较懒,不喜欢写博客.但网上关于详细讲解SPI驱动LCD的文章比较少,虽然也能下载到一些案例程序,但对于初学者来说,如果不懂LCD驱动的原理,不懂如何对文字和图片取模, ...

  10. Linux驱动之LCD驱动编写

    在Linux驱动之内核自带的S3C2440的LCD驱动分析这篇博客中已经分析了编写LCD驱动的步骤,接下来就按照这个步骤来字尝试字节编写LCD驱动.用的LCD屏幕为tft屏,每个像素点为16bit.对 ...

最新文章

  1. BIND 子域授权的实现和区域转发实现
  2. 广州牵引力教育 互联网+企业应用人才名企双选会广州场来啦!
  3. python爬虫吧-Python爬虫——抓取贴吧帖子
  4. 常用的键盘按键(一些小技巧)
  5. yolov3-tiny神经网络FPGA(ZYNQ7020)实现
  6. OneNote for windows10 微软商店下载UWP版本应用打不开
  7. Ubuntu18.04下的模拟神器RetroArch
  8. windows10中最强大王爽汇编语言学习环境
  9. 【AI视野·今日CV 计算机视觉论文速览 第167期】Mon, 11 Nov 2019
  10. ios java模拟器 2017_Visual Studio 2017(Xamarin)未显示iPhone模拟器列表
  11. 定义一个形状类(Shape)方法:计算周长,计算面积。子类: 矩形类、圆形类、三角形类...
  12. 嵌入式UWB定位测距设备开发实战(4)硬件之元器件选型
  13. Android P使用pm install安装apk报错
  14. win10隐藏输入法指示器的设置方法
  15. 苹果新专利针对骑自行车摔倒情况,苹果Find My使自行车免于丢失
  16. 小米生态企业强力推荐的开源免费SRM采购管理平台功能介绍
  17. 使当前线程暂停的方法
  18. pygame功能--pygame.cursors鼠标模块
  19. CSS3 线性渐变循环动画
  20. 论文对图片与什么要求呢?

热门文章

  1. java代码从初始化到具象执行
  2. 化工机械基础期末复习题及答案
  3. java三维动画_基于Java3D的交互式三维动画的研究
  4. STACEY矩阵-0114
  5. C语言——计算当前日期前/后N天的日期
  6. 计算机界面显示不完整,win10系统打开软件界面发现显示不全的方法介绍
  7. xdoj-81-字符串查找
  8. 杂项-Java:JCP
  9. H3C交换机MPLS配置
  10. 外贸常用邮箱有哪些?163mail邮箱适合外贸用吗?