24位RGB到12位转换

时间:2019-02-08 12:11:04

标签: colors rgb

我有一个640x480的图像,需要在VGA上显示。我必须通过matlab imread命令读取该图像,然后将该RGB信息转换为二进制信息,然后在FPGA(Nexys 4 Artix 7开发板)中使用该二进制数据以在VGA上显示图像。但是问题在于,VGA需要12位RGB,而MATLAB则以24位RGB读取图像。如何将图像压缩为12位RGB?

1 个答案:

答案 0 :(得分:1)

您确定您有12位VGA吗?通常24位RGB意味着红色为8位,绿色为8位,蓝色为8位,这导致颜色分辨率为2 ^ 24 = 16.8 mio颜色

将色彩空间缩小到12位会导致4096色的色彩分辨率,这对于现代显示器设备来说是很弱的。

如果您真的想从24位降级到12位,则取决于您必须执行的颜色编码。最常见的是使用三种颜色的MSB,这会导致像位映射

RGB12 = RGB24 [23:20]&RGB24 [15:12]&RGB24 [7:4]

编辑:刚刚在Nexys示意图中看到,您确实具有12位VGA输出。提到的位映射应该是有效的。您可以使用VHDL进行此映射

...
signal RGB24 : std_logic_vector(23 downto 0);
signal RGB12 : std_logic_vector(11 downto 0);
...

RGB12 <= RGB24(23 downto 20) & RGB24(15 downto 12) & RGB24(7 downto 4);