1 Востаннє редагувалося 2andnot (09.09.2017 23:13:08)

Тема: Перша программа: конвертер чорно-білих зображень у массив бітів

Ну, не зовсім перша, але під windows перша, якщо не рахувати контрольні роботи з першого курсу вуза. Програма ця потрібна для представлення зображення у послідовність бітів яку потім контролер відобразить на якомусь графічному дисплеї або світлодіодній матриці. Нічого складного і особливого, проте користь від неї є.
http://myinoutblog.blogspot.com/2017/09/bitpix.html?m=1
До речі можливо комусь буде в нагоді)

Подякували: Monolith, Посіпака2

2

Re: Перша программа: конвертер чорно-білих зображень у массив бітів

присуджую до вищої міри покарання - розстрілу

3

Re: Перша программа: конвертер чорно-білих зображень у массив бітів

буде в нагоді

Є в мене теорія, що масово тиражована мовна порада про використання «в пригоді» та «при нагоді» дає протилежний ефект…

4 Востаннє редагувалося ReAl (10.09.2017 21:47:17)

Re: Перша программа: конвертер чорно-білих зображень у массив бітів

2andnot написав:

Програма ця потрібна для представлення зображення у послідовність бітів яку потім контролер відобразить на якомусь графічному дисплеї або світлодіодній матриці.

Колись давно (дуже давно) теж в таке грався.
Потім стало жаль витрачати час на те, що вже давно зроблено кимось іншим, та ще й краще.

По перше, є srecord, який може двійкові дані практично з будь-якого у будь-який формат перегнати. Тобто власне бінарний, Intel HEX в усіх варіантах, Motorola S-record, … може по дорозі вирізати/вставити фрагменти, заповнити випадковими числами, може порахувати контрольну суму і вставити куди треба і так далі.
Серед іншого srecord може перегнати дані у С-шний масив.
Якщо треба сіру картинку байт на піксель — зберігаєте свій файл у форматі pgm,  бітову картинку — у форматі pbm, потім переганяєте файл у С-шний масив і лінкуєте з програмою.

Якщо використовуєте gcc, то не треба і в С-шний масив переганяти — gcc сам справиться.

Ще є для бітових картинок таке чудо, як формат xbm — старючий формат іконок з X-ів. Він сам по собі — С-шний масив. Тобто зображення — текстовий файл, готовий для компіляції С-компілятором. Тут на сторінці вгорі є логотип дебіан. Прінт-скрін, вирізав графічним редактором квадратик 96×96, підібрав поріг бінарізації, export as — xbm
Якщо ваш улюблений графічний редактор не вміє — зберігайте у якийсь факсовий tiff чи в bmp, а потім
convert file.tif file.xbm
і матимете

Прихований текст
#define replace_debian_width 96
#define replace_debian_height 96
static unsigned char replace_debian_bits[] = {
   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, 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, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0xfc, 0x1f, 0xc0, 0xff, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0xfe, 0x07, 0x00, 0xff, 0x01, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x3f, 0x00, 0x0f, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x3c, 0x00, 0xc0, 0x43, 0x00, 0x0f, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x3c, 0x00, 0x60, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x3c, 0x00, 0x30, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x1e, 0x00, 0x18, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x0e, 0x00, 0x0c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x0e, 0x00, 0x0c, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x0e, 0x00, 0x0c, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x0e, 0x00, 0x20, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x0e, 0x00, 0x40, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x1e, 0x00, 0xe0, 0xc1, 0x0f, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x1e, 0x00, 0xe0, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x1e, 0x00, 0x80, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 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, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x03, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x03, 0x0e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xe0, 0xf3, 0x7c, 0xe6, 0xe3, 0x03, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xf8, 0xdb, 0xfd, 0xee, 0xe7, 0x07, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x18, 0x9b, 0xcd, 0x0e, 0x66, 0x06, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x18, 0x9f, 0xcf, 0x8f, 0x67, 0x06, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x18, 0xff, 0xcf, 0xef, 0x67, 0x06, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x18, 0x1f, 0xcc, 0x76, 0x66, 0x06, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x18, 0x1b, 0xcc, 0x36, 0x66, 0x06, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xb8, 0x1b, 0xc6, 0x76, 0x67, 0x06, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0xf0, 0xf3, 0x7f, 0xe6, 0x67, 0x06, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x60, 0xe3, 0x3d, 0xe6, 0x66, 0x06, 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, 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 };

І що особливо приємне в цьому всьому — автоматизація через make чи щось інше для керування проектом.
Аж до того, що вкидаєте у проект bmp-файл, а воно само його переганяє у xbm отим convert-ом.
Якщо зображення під конкретний дисплей треба повертати, зсувати, віддзеркалювати по горизонталі чи вертикалі — це теж налаштовується в проекті один раз ключами для convert з ImageMagick.

«Машина має працювати, людина — думати»

p.s. модифікатор const чи оформлення через AVR-ський PROGMEM для бітового масиву можна і sed-ом зробити ;)

Подякували: LoganRoss, leofun01, 0xDADA11C73