5578
Комментарий:
|
7675
|
Удаления помечены так. | Добавления помечены так. |
Строка 2: | Строка 2: |
=== Ставить точки или обрабатывать области === |
|
Строка 11: | Строка 9: |
* О проблемах геометрических преобразований | * О проблемах геометрических преобразований === Ставить точки руками или обрабатывать области магией? === |
Строка 16: | Строка 16: |
Строка 25: | Строка 26: |
Довольно интересный компромисс в этом плане — формат [[RW:X_Pixmap|X Pixmap]] | Довольно интересный компромисс в этом плане — формат [[RW:X_Pixmap|X Pixmap]]. Вот, например, [[attachment:rbomb.xpm|маленькая картинка]] в формате xpm: {{attachment:rbomb.png}} А вот ''тот же самый файл'' непосредственно: {{{#!highlight c /* XPM */ static char * rbomb_xpm[] = { /* width height ncolors chars_per_pixel */ "32 32 5 1", /* colors */ " c None s Transparent", "o c gray50", "O c black", "$ c red", "% c #B0B0B0", /* pixels */ " ", " ", " ", " ", " ", " ", " ", " ", " oOoOo ", " O Oo ", " o O ", " O o ", " OOOOO O ", " OOOOO o ", " OOOOOOO O ", " oOOOOOOOOOo o $ $", " oOOOOOOOOOOOo O $ $ ", " oOOOOOOOOOOOOOo o $ ", " OOOOOOOO%ooOOOO O $ $ ", " oOOOOOOOOO%ooOOOo o $ $ ", " OOOOOOOOOOOOOOOOO OoO $ $ $", " OOOOOOOOOOO%ooOOO $$ ", " OOOOOOOOOOO%ooOOO $ $ ", " OOOOOOOOOOO%ooOOO $ $ ", " OOOOOOOOOOOOOOOOO $ ", " oOOOOOOOOOOOOOOOo $ $ $", " OOOOOOOOOOOOOOO ", " oOOOOOOOOOOOOOo $ ", " oOOOOOOOOOOOo ", " oOOOOOOOOOo ", " oOOOOOo ", " "}; }}} То есть сам формат — '''строго текстовый'''. Зная структуру XPM-файла, его несложно создать, и ещё проще — редактировать в произвольном текстовом редакторе. |
Строка 29: | Строка 81: |
=== Что в итоге === | |
Строка 33: | Строка 85: |
* Правда, броузеры его показывать отказываются :( |
XPM: растровое изображение своими руками
Возьмём какую-нибудь тему из школьной информатики. Например, изучение растровой графики.
О чём по этой теме стоит разговаривать?
- О матричном представлении изображения, в том числе — о том, что одной только матрицы недостаточно: размеры, способ кодирования цвета, другая дополнительная информация
- О кодировании цветов и цветовых пространствах (как минимум — RGB, CMYK и HLS/HLV)
- Об упаковке изображения и об упаковке «с потерями»
- О проблемах геометрических преобразований
Ставить точки руками или обрабатывать области магией?
Среди этих тем некоторые — явно выше того, что можно в школе объяснить до конца (та же упаковка с потерями, например). Некоторые темы можно осветить только поверхностно. Можно запустить любой приличный редактор растровой графики и показать диалог выбора цвета в различных цветовых пространствах — какой при изменении параметров получается в результате цвет. Однако объяснять, почему цветовые пространства именно такие, придётся всё равно «на пальцах» (колбочки, палочки, складывание цветов, вычитание, а на освещённости/светлоте начинается уже математика).
Геометрические преобразования стоит исследовать уже после близкого знакомства с предыдущими темами.
А вот теме «матричное представление изображения», как это ни странно, не хватает программной наглядности. С одной стороны, имеется растровый редактор, в котором всё вполне наглядно, своими руками делается. А с другой стороны, со стороны программиста — разнообразные прекрасные библиотеки для работы с разнообразными прекрасными растровыми форматами.
И вот эта пропасть слабо преодолима. Потому что библиотеки, в конечном счёте, описывают совсем не то, что человек делает в простейшем растровом редакторе, а если описывают, то в очень общем, действительно сложном изводе. Для короткого, но познавательного изучения растровых форматов на занятиях по программированию большинство библиотек непригодны — получится изучение самих библиотек.
Байты и договоренности
Чего не хватает — это наглядного представления изображения в виде двумерного массива байтов и сопутствующей информации. Например, в «проекте рисования графика» мы использовал для этой цели… двумерный массив байтов! Более точно — массив строк, каждый символ которых соответствует отдельной точке «экрана». Обновление такого «экрана» — просто вывод всех строк на текстовый терминал.
Довольно интересный компромисс в этом плане — формат X Pixmap.
Вот, например, маленькая картинка в формате xpm: А вот тот же самый файл непосредственно:
1 /* XPM */
2 static char * rbomb_xpm[] = {
3 /* width height ncolors chars_per_pixel */
4 "32 32 5 1",
5 /* colors */
6 " c None s Transparent",
7 "o c gray50",
8 "O c black",
9 "$ c red",
10 "% c #B0B0B0",
11 /* pixels */
12 " ",
13 " ",
14 " ",
15 " ",
16 " ",
17 " ",
18 " ",
19 " ",
20 " oOoOo ",
21 " O Oo ",
22 " o O ",
23 " O o ",
24 " OOOOO O ",
25 " OOOOO o ",
26 " OOOOOOO O ",
27 " oOOOOOOOOOo o $ $",
28 " oOOOOOOOOOOOo O $ $ ",
29 " oOOOOOOOOOOOOOo o $ ",
30 " OOOOOOOO%ooOOOO O $ $ ",
31 " oOOOOOOOOO%ooOOOo o $ $ ",
32 " OOOOOOOOOOOOOOOOO OoO $ $ $",
33 " OOOOOOOOOOO%ooOOO $$ ",
34 " OOOOOOOOOOO%ooOOO $ $ ",
35 " OOOOOOOOOOO%ooOOO $ $ ",
36 " OOOOOOOOOOOOOOOOO $ ",
37 " oOOOOOOOOOOOOOOOo $ $ $",
38 " OOOOOOOOOOOOOOO ",
39 " oOOOOOOOOOOOOOo $ ",
40 " oOOOOOOOOOOOo ",
41 " oOOOOOOOOOo ",
42 " oOOOOOo ",
43 " "};
То есть сам формат — строго текстовый. Зная структуру XPM-файла, его несложно создать, и ещё проще — редактировать в произвольном текстовом редакторе.
TODO X Pixmap
Что в итоге
При всё своей «игрушечности» формат XPM:
- На самом деле никакой не игрушечный
- Долгое время был чуть ли не де-факто стандартом на маленькие изображения в графической системе X.org
Правда, броузеры его показывать отказываются
- Позволяет сразу зацепить несколько тем:
Растр как матрица точек + дополнительная информация
- Представление цветов в пространстве RGB и именование
- Палитрованое изображение
- Абстракции «прозрачность», «цвет фона», «цвет рисования»
- Работа с точками растра при преобразовании
Неплохо подходит для изучения в курсе программирования на Си