Вообщем есть чёрно-белое изображение в формате PNG. Необходимо реализовать следующее: ардуинка должна считывать пиксель в 0 или 1. Причем нужно знать х и y координаты пикселя. Видел без объяснений обработку изображения в MATLAB, но с этим проблема. Плюс, насколько я знаю, ардуино не поддерживает двухмерные массивы. Получается должен PNG файл конвертирован в что-то "съестное" для ардуино. Уже думал считывать с карты памяти переработанное изображение как-то так: 100 // высота 150 // ширина 1 // 1 пиксель первого ряда 0 // 2 пиксель первого ряда 0 // 3 пиксель первого ряда 0 1... Потом как прошли 100 пикселей переходим на второй ряд Только вот как PNG преобразовать в такое? Прошу помощи
Ну это мой прокол) Вот как изображение преобразовать?! Ага, нашел на Хабре библиотеку для С++. Кажись то, что нужно: https://habrahabr.ru/post/52775/ Похоже нужно в этом направлении копать
Сесть да написать на любимом языке за полчаса. Можно и на С++, но я бы предложил на чем-нибудь попроще, производительность тут роли не играет.
нет. это не то, что нужно. тебе надо для простоты преобразовать png в bmp без сжатия. даже не bmp, а простой raw
я не конкретно про фотоаппаратный RAW. Я хотел сказать, что формат надо брать самописный raw, без сжатия и без мудреных заголовков, как у bmp. Впереди структурка с размером изображения (lenght, width) и дальше подряд неупакованные пиксели. Если цветное, то на пиксель по 1-2 байта, если монохромное - то байт на 8 пикселей.
То есть совсем не raw, а урезанный bmp, потому что написать свой формат очевидно проще, чем скопипастить в свой код структуру заголовка bmp.
На любимом языке) я только на С++ и то консольные программы. Да нашел вчера как bmp в массив перегнать, но пока не разобрался. На киберфоруме там полно таких тем где bmp в массив нужно. Как посмотрю, то у всех почти оказывается для дипломных работ в вуз. Вообщем надо поморочить голову На чем попроще? В процесинге таких функций случайно нет? И как мне получить этот урезанный bmp? Было бы просто здорово, если картинку открыть как текст и читать пиксели)
По моему, подходящий для вашей задачи формат X BitMap. Конвертировать PNG в XBM умеют Gimp, Imagemagick или, например, онлайн конвертер.
Да, интересненько. Нашел чёрно-белую картинку, конвертировал через онлайн. Вот: #define 1511956930305_width 225 #define 1511956930305_height 225 static char 1511956930305_bits[] = { 0x7C, 0xC0, 0x07, 0x3E, 0xF8, 0x00, 0x80, 0x3F, 0xE0, 0x07, 0x3E, 0xF0, 0xFF, 0x01, 0xFC, 0x80, 0x0F, 0x3C, 0xF0, 0x01, 0x80, 0x3F, 0xC0, 0x07, И как расшифровывать эти 0хFF и так далее? Аааааааааа, понял Шестнадцатеричный код переводим в двоичный и получаем 8 цифер. 0хFF >> 11111111. Каждая цифра это один пиксель
Каждая точка представлена одним двоичным разрядом (битом). Точка чёрная, если в разряде логическая единица, и белая, если логический ноль. Каждый байт массива содержит информацию о восьми точках. 0хFF (шестнадцатеричный вид) = B11111111 (двоичный вид) - восемь черных пикселей