7670
Комментарий:
|
7675
|
Удаления помечены так. | Добавления помечены так. |
Строка 9: | Строка 9: |
* О проблемах геометрических преобразований | * О проблемах геометрических преобразований |
Строка 26: | Строка 26: |
Довольно интересный компромисс в этом плане — формат [[RW:X_Pixmap|X Pixmap]]. | Довольно интересный компромисс в этом плане — формат [[RW:X_Pixmap|X Pixmap]]. |
Строка 36: | Строка 36: |
" s None c None", | " c None s Transparent", |
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 и именование
- Палитрованое изображение
- Абстракции «прозрачность», «цвет фона», «цвет рисования»
- Работа с точками растра при преобразовании
Неплохо подходит для изучения в курсе программирования на Си