0

这个 Image2LCD 软件 ( https://www.buydisplay.com/default/image2lcd ) 将图像转换为 c 数组。我想自己编写这个基本操作,但我不明白为什么软件会为大小为 200x200 的输入图像输出一个长度为 5000 的数组。对于 400x400,数组大小为 20000。它似乎总是像素数的 1/8。

正方形 200x200 图像的输出数组的开头和结尾如下所示:

const unsigned char gImage_test[5000] = { /* 0X00,0X01,0XC8,0X00,0XC8,0X00, */
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X60,0X00,0X00,0X00,0X00,
0X3C,0X60,0X00,0X0C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X70,0X00,0X00,0X00,0X00,0X7E,0X70,0X00,0X0E,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X78,0X00,0X00,
0X00,0X00,0X7F,0X78,0X00,0X0F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFC,0X3C,0X3E,0X3C,0X3F,0XF8,0X3C,0X7F,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,

...

,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,};

(是的,图像中有很多白色。)

为什么不需要为每个像素设置一个值?

4

1 回答 1

2

在这里从臀部拍摄,但如果您使用单色,则每个像素只需要一位字节 = 8 位)。这些位可以打包成字节以提高存储效率。假设图像的前 8 个像素是这些:

0 1 0 0 0 0 0 1  

如果我们将这 8 位解释为一个二进制数,这就是1000001,它是65十进制的 - 所以只存储65在一个 8 位整数中,只占用一个字节,将存储所有 8 个单色像素。缺点是它不像将每个像素作为数组中的单独值那样直观。

我可能错了,但 1/8 直指这种压缩。

于 2018-09-12T09:14:56.097 回答