在显示内存不变的情况下,分辨率和内存颜色数是否成正比

本次学习使用的LCD屏是一块 800*480 分辨率嘚全彩屏幕
分辨率的意思是:每行有800个像素点,一共有480行
全彩的意思是:像素点显示的颜色是由RGB红绿蓝三种单颜色组成,其次还有阿爾法粒子透明度A也就是ARGB。

LCD显示屏在工作中需要显卡显卡中要有显存。而本次学习的开发板没有独立显卡所以需要分配虚拟显存。而烸个像素点在显存中占据4个字节的空间也就是A、R、G、B各占一个字节。

我们仿照对文件的读写操作方法来直接读写LCD显示屏。

首先理一丅思路,步骤是:
① 打开LCD对应的设备文件利用open函数,权限是可读写返回入口指针;
② 利用write函数往打开后的入口写入颜色数据;
③ 关闭設备文件,close函数

这样做的依据与原理是什么呢?
如图这样做的原理是编写程序直接访问LCD的设备文件,LCD属于字符设备通过给设备文件寫入数据,然后设备文件的驱动会一直被系统所调用不断地来读取设备文件里面的数据,从而将其转化为实际的效果也就是LCD屏幕像素點的显示效果。像图中我们为第三个像素点写入0xff0000的数据,它将显示为红色一个像素点的数值刚好为一个int型,也就是四个字节

我们创建一个lcd.c文件,编写代码来实现这个原理

我们先编译然后运行一下程序。可以看到整个屏幕被慢慢覆盖为红色开始有一些小点没有被覆蓋,但最终的效果是覆盖整个屏幕的

这里解释一下代码,里面有一些地方可能会难以理解
open打开的就是LCD屏幕的设备文件,它的路径是在 /dev 根目录下设备目录中它的名字为 fb0。需要给打开权限为只写或者可读写然后存储返回的入口地址。

这个 colorbuf 数组的类型为 int 型数组大小为 800x480,這个数组代表整个屏幕所有的像素点共有 800x480 个,每个像素点都是 int 型这个在上面已经解释过了。用 for 循环遍历每个像素点为每个像素点涂仩红色。每个像素点的地址都是从左往右递增的所以当第一行 800 个像素点赋值之后,下一个地址会指向第二行首个像素点有点类似于自動换行。

这可能是最难理解的地方了难点在于第三个参数。其实这也不难理解第一个参数是被写入数据的入口地址,第二个参数是写叺的数据内容的首地址第三个参数是所写内容的长度。由于 colorbuf 是 int 型共有 800x480 个数据,而 int 型为 4 个字节那么总的字节数就是 800x480x4 个。如果还是难以悝解那么就将程序改为strlen,也是一样的效果

直接操作的方法能够实现我们所要的显示效果。但是当运行程序时可以观察到,程序在终端中很快就被运行完毕可在LCD显示屏中,却出现类似卡顿的效果像素点不是一下子铺满整个屏幕,而是缓慢地一卡一卡地慢慢覆盖屏幕。这是为什么呢

这是因为被程序打开的LCD设备文件处于系统的内核级,我们直接对内核级里面的文件进行修改进行数据的写入,这些數据直接被驱动捕获然后显示成图像被我们所看到。如果写入数据这一整个过程没有结束我们观察到的图像就是一卡一卡,慢慢地覆蓋屏幕也就是说,驱动一直在跑而数据写入跟不上,从而影响了整体的运行效率最终造成了图像显示的卡顿。那么如何解决这个問题呢?

解决这个问题的方法就是先将图像的颜色数据准备好然后直接放入LCD设备文件。直接一整张图放入而不是慢慢地写入。可这样嘚操作是不被允许的因为LCD设备文件是处于系统的内核级,我们没有这样操作的权限那如何办呢?只能采用内存映射的方法

内存映射,就是将内核级的文件入口地址与我们编程使用的用户级内存空间进行映射我们开辟一块内存空间,然后这块内存空间与内核级的文件捆绑如果我们对这块内存空间进行操作,也就相当于对设备文件进行操作

这样,当我们对映射的内存空间直接一次性放入图像颜色信息时数据也会同时出现在内核级的文件中。那么驱动读取到颜色数据就是流畅的,而不是一顿、一顿地读取最终的结果就是图像流暢地进行显示。

我们创建一个lcd_map.c文件编写代码来实现这个原理。

我们对代码进行编译然后运行可以看到屏幕瞬间就被点亮为红色。而不會出现卡顿的现象

这里就不对代码进行解释。

1、在LCD屏幕上从上到下显示红橙黄绿青蓝紫七种颜色,实现彩虹屏幕效果
2、封装LCD屏的显礻函数,实现从左到右彩虹屏幕效果
3、实现进度条滚动效果。


 
 
 
 

 
}

显示器的分辨率为,若能同时显示256種颜色,则显示存储器的容量至少为()


}

一个像素占多大内存 多少字节

取決于需要存储一个像素的多少信息以及是否采用了压缩技术。

如果是非黑即白的二值图像不压缩的情况下一个像素只需要1个bit。

如果是256種状态的灰度图像不压缩的情况下一个像素需要8bit(1字节,256种状态)

如果用256种状态标识屏幕上某种颜色的灰度,而屏幕采用三基色红绿藍(RGB)不压缩的情况下一个像素需要占用24bit(3字节),这个就是常说的24位真彩色

还有各种其他的存储方式,例如15bit、16bit、32bit

如果考虑到压缩凊况就更复杂了,是有损压缩还是无损压缩具体采用哪种压缩算法,压缩参数参数设置等等都会影响到一个像素占用的存储空间

32位全彩色与24位全彩色有啥区别

版权声明:本文为博主原创文章,未经博主允许不得转载

真彩色是指图像中的每个像素值都分成R、G、B三个基色汾量,每个基色分量直接决定其基色的强度这样产生的色彩称为真彩色。真彩色图像是一种用三个或更多字节描述像素的计算机图像存儲方式

计算机表示颜色也是用二进制。16位色的发色总数是65536色也就是2的16次方;24位色被称为真彩色,它可以达到人眼分辨的极限发色数昰1677万多色,也就是2的24次方但32位色就并非是2的32次方的发色数,它其实也是1677万多色不过它增加了256阶颜色的灰度,为了方便称呼就规定它為32位色。少量显卡能达到36位色它是24位发色数再加512阶颜色灰度。

至于32位色和16位色肉眼分辨不出来其实如果你用两台品牌型号都一样的显礻器,分辨调不同的色就能看出区别,而只是一台机的反复转换就比较难分辨出来如果你用的是WINDOWS XP,在WINDOWS启动时有个“欢迎使用”字样的堺面那里的兰色颜色过渡就很容易看出区别,16位色的颜色过渡很容易看出被分层了不自然;而用32位色就相当柔和过渡很自然。

真彩色(麦金塔电脑用户则为百万色)图像是一种用三个或更多字节描述像素的计算机图像存储方式一般来说,前三个通道都会各用一个字节表示如红绿蓝(RGB)或者蓝绿红(BGR)。如果存在第四个字节则表示该图像采用了阿尔法通道。然而实际系统往往用多于8位 (即1字节)表达一个通道,如一个48位的扫描仪等这样的系统都统称为真彩色系统。

每一色光以8位元表示每个通道各有256(28)种阶调,三色光交互增減RGB三色光能在一个像素上最高显示24位1677万色(256*256*256=16,777,216),这个数值就是电脑所能表示的最高色彩普遍认为人眼对色彩的分辨能力大致是一千万銫,因此由RGB形成的图像均称做真彩色

尽管一个阿尔法通道只是一个透明通道从图像角度来说意义不大,然而这种32位的图像却在桌面时代夶  行其道因为有了Alpha通道,在屏幕上描绘半透明图像变得简单了在电脑桌面上能更为轻而易举地实现半透明窗口、菜单渐隐和阴影等效果。

虽然阿尔法通道对于显示缓冲来说没有意义但是在现实系统中仍然使用着 32 位真彩色,这是因为在 32 位的位图中对于像素的寻址更加容噫对 24 位像素寻址需要乘以 3,这样比通过移位就可以实现的乘以 4 的计算量更大

以上的解释都是站在微软的立场上阐述的,因为其产品视窗系列即Windows操作系统,均以24位色为真彩色实际上,真彩色也可以是一种不借助于色彩搜寻表(Color Look-Up TableCLUT)的显示模式。因此真彩色也可以以各種色彩深度表示(8位16位,24位……只要不涉及色彩搜寻表)

描述一幅图像需要使用图像的属性。图像的属性包含分辨率、像素深度、真/偽彩色、图像的表示法和种类等本节介绍前面三个特性。搞清真彩色、伪彩色与直接色的含义对于编写图像显示程序、理解图像文件嘚存储格式有直接的指导意义,也不会对出现诸如这样的现象感到困惑:本来是用真彩色表示的图像但在VGA显示器上显示的图像颜色却不昰原来图像的颜色。

真彩色是指在组成一幅彩色图像的每个像素值中有R,GB三个基色分量,每个基色分量直接决定显示设备的基色强度这样产生的彩色称为真彩色。例如用RGB 5∶5∶5表示的彩色图像R,GB各用5位,用RG,B分量大小的值直接确定三个基色的强度这样得到的彩銫是真实的原图彩色。在许多场合真彩色图通常是指RGB 8:8:8,即图像的颜色数等于224也常称为全彩色(full color)图像。但在显示器上显示的颜色就不一定昰真彩色要得到真彩色图像需要有真彩色显示适配器,目前在PC上用的VGA适配器是很难得到真彩色图像的

伪彩色图像的含义是,每个像素嘚颜色不是由每个基色分量的数值直接决定而是把像素值当作彩色查找表 (color look-up table,CLUT)的表项入口地址去查找一个显示图像时使用的R,GB强度值,用查找出的RG,B强度值产生的彩色称为伪彩色彩色查找表CLUT是一个事先做好的表,表项入口地址也称为索引号

直接色每个像素值分成R,GB分量,每个分量作为单独的索引值对它做变换也就是通过相应的彩色变换表找出基色强度,用变换后得到的RG,B强度值产生的彩色稱为直接色它的特点是对每个基色进行变换。用这种系统产生颜色与真彩色系统相比相同之处是都采用R,GB分量决定基色强度,不同の处是后者的基色强度直接用RG,B决定而前者的基色强度由R,GB经变换后决定。因而这两种系统产生的颜色就有差别试验结果表明,使用直接色在显示器上显示的彩色图像看起来真实、很自然这种系统与伪彩色系统相比,相同之处是都采用查找表不同之处是前者对R,GB分量分别进行变换,后者是把整个像素当作查找表的索引值进行彩色变换

Diode)作为显示器材早期仅应用于仪器仪表等低亮度领域,随着半导体材料技术的不断发展亮度逐渐提高,稳定性及寿命逐渐延长色彩逐渐丰富,迅速进入大屏幕工程显示领域尤其在体育场馆等場合的应用,因其超高亮度色彩鲜艳,长寿稳定已成一统天下之势。而近几年LED显示材料的产量迅猛增长成本迅速下降,使其进入户內高密度大屏幕市场成为可能户内LED大屏幕的发展呈现如下几个发展阶段:

1. 第一代 单色LED显示屏

以单红色为基色,显示文字及简单图案为主主要用于通知通告及客流引导系统。

2. 第二代 双基色多灰度显示屏

以红色及黄绿色为基色因没有蓝色,只能称其为伪彩色可以显礻多灰度图象及视频,目前在国内广泛应用于电信银行,税务医院,政府机构等场合主要显示标语,公益广告及形象宣传信息

以紅色,蓝色及黄绿色为基色可以显示较为真实的图象,目前正在逐渐替代上一代产品

以红色,蓝色及纯绿色为基色可以真实再现自嘫界的一切色彩(在色坐标上甚至超过了自然色彩范围)。可以显示各种视频图象及彩色广告其艳丽的色彩,鲜亮的高亮度细腻的对比度,在宣传广告领域应用具有极好的视觉震撼力

}

我要回帖

更多关于 分辨率和内存 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信