Это программное обеспечение Image2LCD (https://www.buydisplay.com/default/image2lcd) преобразует изображения в c-массивы. Я хочу написать эту базовую операцию самостоятельно, но я не понимаю, почему программа выводит массив длиной 5000 для входного изображения размером 200×200. Для 400×400 размер массива равен 20000. Кажется, он всегда равен 1/8 от количества пикселей.
Выходной массив для квадратного изображения 200×200 начинается и заканчивается следующим образом:
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,};
(Да, на изображении много белого.)
Почему вам не нужно одно значение для каждого пикселя?
Съемка с бедра здесь, но если вы используете монохромный, вам нужен только один немного на пиксель (байт = 8 бит). Эти биты могут быть упакованы в байты для эффективности хранения. Скажем, первые 8 пикселей вашего изображения:
0 1 0 0 0 0 0 1
Если мы интерпретируем эти восемь битов как одно двоичное число, это 1000001
, который 65
в десятичном виде — так просто хранить 65
в 8-разрядном целом числе, занимающем только один байт, будут храниться все 8 монохромных пикселей. Недостатком является то, что он не так интуитивно понятен, как каждый пиксель в виде отдельного значения в массиве.
Я могу ошибаться, но 1/8 указывает прямо на этот вид сжатия.
Других решений пока нет …