субота, 10 березня 2018 р.

Arduino tv-out. Как показать на телевизоре картинку из файла.

Необходимо вывести на экран телевизора картинку формата *.bmp.

С библиотекой TV-out для ардуино уже работал. Выводил текст и геометрические фигуры. Но картинки из файла выводить не доводилось. Немного погуглил и нашел полуавтоматическое решение.

Для начала нужна картинка


В моем случае это *.bmp файл размером 78х71 пикселей. Открыл исходный файл в photoshop переключил режим, вначале, "градации серого", и после, "битовый формат". На прямую не переключается.
Уменьшил размер до 78х71 пикселей.
Сохранил в *.bmp

Перевод картинки в формат понятный библиотеке

Для этого необходимо скачать программу  Image2Code (зеркало у меня на гуглдрайве).
Открываю программу, перетаскиваю в нее файл с картинкой. Выбираю третий вариант чтения файла. По умолчанию галочка "Invert Image", и по умолчанию "C Array Writer":



После этого нажимаю "Convert" и получаю текстовый файл с набором цифр, которые и есть картинка пригодная для библиотеки Tvout. Часть цифр вырезал.

Из текста удаляю фигурные скобки, они нам не нужны. И в итоге получается массив чисел записаных через запятую.

Используем с библиотекой

создаем файл  TVOlogo.h. Ложим файл в директорию с файлом скетча *.ino. В файл записываем следующее:
# include <avr/pgmspace.h>
# ifndef TVOLOGO_H
# define TVOLOGO_H

extern const unsigned char TVOlogo[];
#endif

Создаем еще один файл TVOlogo.cpp. Этот файл также сохраняем в директорию со скетчем *.ino. В этот файл пишем текст:
#include "TVOlogo.h"
PROGMEM const unsigned char TVOlogo[] = {
96,32,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,
0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,
0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x10,0x38,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x04,
0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40,0x02,
0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x80,0x02,
0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x02,
0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xC2,
0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x42,
0x4F,0xFF,0x60,0x18,0x00,0x00,0x00,0x00,0x17,0xFF,0xFF,0x42,
0x4F,0xFF,0x60,0x18,0x00,0x00,0x00,0x30,0x14,0x00,0x01,0x42,
0x40,0x60,0x60,0x18,0x00,0x00,0x00,0x30,0x14,0x70,0x71,0x42,
0x40,0x60,0x30,0x30,0x00,0x00,0x00,0x30,0x14,0x88,0x89,0x42,
0x40,0x60,0x30,0x30,0x3E,0x06,0x0C,0xFE,0x15,0x05,0x25,0x42,
0x40,0x60,0x30,0x60,0xFF,0x86,0x0C,0xFE,0x15,0x72,0x75,0x42,
0x40,0x60,0x18,0x60,0xC1,0x86,0x0C,0x30,0x15,0x05,0x25,0x42,
0x40,0x60,0x18,0x61,0x80,0xC6,0x0C,0x30,0x14,0x88,0x89,0x42,
0x40,0x60,0x18,0xC1,0x80,0xC6,0x0C,0x30,0x14,0x70,0x71,0x42,
0x40,0x60,0x0C,0xC1,0x80,0xC6,0x0C,0x30,0x14,0x00,0x01,0x42,
0x40,0x60,0x0C,0xC1,0x80,0xC6,0x0C,0x30,0x17,0xFF,0xFF,0x42,
0x40,0x60,0x0F,0x81,0x80,0xC6,0x0C,0x30,0x10,0x00,0x00,0x42,
0x40,0x60,0x07,0x80,0xC1,0x87,0x1C,0x30,0x15,0x40,0x15,0x42,
0x40,0x60,0x07,0x80,0xFF,0x83,0xFC,0x3E,0x12,0x8A,0x8A,0x42,
0x40,0x60,0x03,0x00,0x3E,0x01,0xEC,0x1E,0x15,0x40,0x15,0x42,
0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x42,
0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xC2,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,
0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,
0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
Только вместо имеющегося массива цифр вставляем полученный ранее массив.
Первые две цифры это размер исходной картинки. Его меняем в зависимости от размера вашей картинки. В моем случае это 78, 71.

Выводим изображение на экран

Вначале скетча подключаем файл TVOlogo.h.

#include "TVOlogo1.h"

В коде программы, когда нужно вывести эту картинку на экран пишем:

 TV.bitmap(0,0,TVOlogo);

Здесь 0,0 это координаты верхнего левого угла картинки относительно начала координат экрана. TVOlogo - то что выводим. 

2 коментарі: