PNG в массив или в что-то другое :)

Тема в разделе "Arduino & Shields", создана пользователем БАРМАТОГРАФ, 28 ноя 2017.

Метки:
  1. Вообщем есть чёрно-белое изображение в формате PNG. Необходимо реализовать следующее: ардуинка должна считывать пиксель в 0 или 1. Причем нужно знать х и y координаты пикселя. Видел без объяснений обработку изображения в MATLAB, но с этим проблема. Плюс, насколько я знаю, ардуино не поддерживает двухмерные массивы. Получается должен PNG файл конвертирован в что-то "съестное" для ардуино. Уже думал считывать с карты памяти переработанное изображение как-то так:
    100 // высота
    150 // ширина
    1 // 1 пиксель первого ряда
    0 // 2 пиксель первого ряда
    0 // 3 пиксель первого ряда
    0
    1...
    Потом как прошли 100 пикселей переходим на второй ряд
    Только вот как PNG преобразовать в такое?
    Прошу помощи:)
     
  2. rkit

    rkit Гуру

    Замечательно подерживает.
     
  3. Ну это мой прокол)
    Вот как изображение преобразовать?! :)

    Ага, нашел на Хабре библиотеку для С++. Кажись то, что нужно: https://habrahabr.ru/post/52775/
    Похоже нужно в этом направлении копать
     
    Последнее редактирование модератором: 29 ноя 2017
  4. rkit

    rkit Гуру

    Сесть да написать на любимом языке за полчаса. Можно и на С++, но я бы предложил на чем-нибудь попроще, производительность тут роли не играет.
     
  5. DetSimen

    DetSimen Guest

    нет. это не то, что нужно. тебе надо для простоты преобразовать png в bmp без сжатия.

    даже не bmp, а простой raw
     
    Последнее редактирование модератором: 29 ноя 2017
  6. rkit

    rkit Гуру

    Что-то новенькое
     
  7. DetSimen

    DetSimen Guest

  8. rkit

    rkit Гуру

  9. DetSimen

    DetSimen Guest

    я не конкретно про фотоаппаратный RAW. Я хотел сказать, что формат надо брать самописный raw, без сжатия и без мудреных заголовков, как у bmp.
    Впереди структурка с размером изображения (lenght, width) и дальше подряд неупакованные пиксели. Если цветное, то на пиксель по 1-2 байта, если монохромное - то байт на 8 пикселей.
     
  10. rkit

    rkit Гуру

    То есть совсем не raw, а урезанный bmp, потому что написать свой формат очевидно проще, чем скопипастить в свой код структуру заголовка bmp.
     
    DetSimen нравится это.
  11. DetSimen

    DetSimen Guest

  12. На любимом языке) я только на С++ и то консольные программы. Да нашел вчера как bmp в массив перегнать, но пока не разобрался. На киберфоруме там полно таких тем где bmp в массив нужно. Как посмотрю, то у всех почти оказывается для дипломных работ в вуз. Вообщем надо поморочить голову

    На чем попроще? В процесинге таких функций случайно нет?

    И как мне получить этот урезанный bmp? Было бы просто здорово, если картинку открыть как текст и читать пиксели)
     
    Последнее редактирование модератором: 29 ноя 2017
  13. ZAZ-965

    ZAZ-965 Гуру

    По моему, подходящий для вашей задачи формат X BitMap.
    Конвертировать PNG в XBM умеют Gimp, Imagemagick или, например, онлайн конвертер.
     
    arkadyf и БАРМАТОГРАФ нравится это.
  14. Да, интересненько. Нашел чёрно-белую картинку, конвертировал через онлайн. Вот:
    #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. Каждая цифра это один пиксель
     
    Последнее редактирование модератором: 29 ноя 2017
    ZAZ-965 нравится это.
  15. ZAZ-965

    ZAZ-965 Гуру

    Каждая точка представлена одним двоичным разрядом (битом). Точка чёрная, если в разряде логическая единица, и белая, если логический ноль. Каждый байт массива содержит информацию о восьми точках.
    0хFF (шестнадцатеричный вид) = B11111111 (двоичный вид) - восемь черных пикселей
     
    БАРМАТОГРАФ и arkadyf нравится это.
  16. b707

    b707 Гуру

    как вы все в вуз-то поступили с таким IQ?...
     
  17. DetSimen

    DetSimen Guest

    Не знаю. Меня выучили, от безысходности, видимо. Иначе не обьяснишь...
     
  18. Можно без оскорблений, а? Я еще даже школу не заканчиваю
     
  19. Кстати всем спасибо, особенно ZAZ-965.