16-ти битный формат векторной графики

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

1. AI - формат ai, создаваемый программой Illustrator от известной корпорации Adobe
2. CDR - формат является внутренним форматом векторного редактора CorelDRAW
3. EPS - универсальный формат файлов, поддерживаемый многими   редакторами
4. FLA, SWF -  форматы исходных Flash-файлов и flash-анимации, созданные в Adobe Flash
5. PICT - сложный формат от Apple Computer для использования на платформе Macintosh
6. WMF -  аналог формата PICT в среде Windows
7. TGA - ориентирован на  видеокарту TrueVision, популярен в мире анимационной графики
8. TIFF - "теговый изобразительный файл" с гибкостью записи и возможными расширениями
9. SVG - формат основан на XML и поддерживается многими веб-браузерами

   Вы видите, что существует большое разнообразие всяких форматов, содержащих векторную графику и являющихся основой для работы с ней.
   Тем не менее, делая свою собственную программу, я разработал свой собственный формат. Он мне кажется наиболее простым, компактным, понятным, и во многих отношениях более удобным.

   Формат внутреннего представления векторной графики в программе DM_Paint действительно, самый простой и компактный. Это – формат целых чисел типа Integer. Каждое число такого типа занимает всего 16 бит (15 бит, если не считать бит знака), что составляет 2 байта. Два символа занимают столько же места.
   2-х байтовые целые числа вполне успешно могут представлять как значения координат, так и значения цвета в формате BGR, если у каждой из компонент цвета отнять по три младших бита: 24-3*3=15.

   Второе преимущество этих чисел состоит в том, что они невелики и легко читаются в текстовом представлении, и это позволяет выводить информацию о загруженной графике на экран, так, как вы можете это видеть на иллюстрации, а также хранить эту информацию в двух видах – в текстовом формате, и в формате целых чисел. Файлы текстового формата ничем не отличаются от того, что выводится на экран, и мы можем не только просматривать эти файлы в Блокнотике, но и спокойно править их.
 
   Наконец, третьим преимуществом использования целых чисел в программе является их организация – все они записываются в единый двухмерный массив Pvv(I,K), число строк которого весьма велико – 20000, а число позиций в каждой строке – 12. То есть, второй индекс массива изменяется от 0 до 11.
   Если в поз.0 строки стоит число большее нуля, то это число трактуется как логотип векторного элемента, а сама строка называется титульной.
   Если же в этой позиции стоит ноль, то эта строка дополнительная или неиспользуемая – оставшаяся, например, после удаления одного из элементов графики.
   Дополнительные строки идут одна за другой, и на начало этих строк (на индекс I) указывает число, находящееся в поз.3 титульной строки.
   Дополнительные строки содержат или координаты X,Y точек, составляющих контур графической фигуры, или координаты кривых Безье, если фигура сделана из этих кривых. В обоих случаях, на число точек или на число иных элементов, находящихся в дополнительных строках, указывается в 4-й позиции титульной строки.

   Подобная организация целочисленного массива делает очень удобным редактирование векторной графики – её элементы легко переставлять и менять местами (переставляем только титульные строки) меняя тем самым очерёдность вывода фигур на рисунок. Легко перемещать и поворачивать отдельные фигуры - координаты Xо,Yо начальной точки каждой фигуры всегда находятся в поз.1 и поз.2 титульной строки. По этим же координатам легко организовать выбор фигуры – в режиме Показа начальные точки фигур показываются маленькими кружочками. Кликнув по кружочку правой кнопкой мыши, мы выбираем нужную фигуру.
   В общем, удобств много. Конкретные подробности о значениях чисел в титульных и дополнительных строках приводятся тут - http://proza.ru/2020/12/22/345 что совсем не мешает всем желающим использовать описываемый стандарт на свой манер, по-своему трактовать действующие в нём логотипы фигур и даже добавлять новые логотипы.
   Исходники программы открыты. Они находятся тут - http://disk.yandex.ru/d/WJ5xN76xQrReYQ?w=1 а саму программу можно скачать по этой ссылке http://disk.yandex.ru/d/suZ-qnFu4YOdYw
   См. также более раннее описание функционирования программы и её структур - http://proza.ru/2020/09/19/1515


   ВЗАИМОДЕЙСТВИЕ ПРОГРАММЫ С ФАЙЛАМИ СОДЕРЖАЩИМИ ВЕКТОРНУЮ ГРАФИКУ

   Текущая папка, та, из которой запускается программа, может содержать специальный файл AGv, предназначенный для оперативного хранения векторной графики в целочисленном виде. Несмотря на то, что этот файл имеет расширение txt, то есть, заявлен как текстовый, осмысленными в нём являются только два первых символа - это GV (графика векторная), что соответствует целому числу 22087, и по этому числу осуществляется проверка фактической принадлежности файла перед его открытием. Далее в этом файле записано число ноль, и следом – число строк векторной графики.
   Для графики, распечатка которой показана на иллюстрации, это число 132. Следом за этим числом пойдут числа 14  218  226  40  2  7  0  0  28  703  5 и 0, поскольку именно эти числа находятся в первой строке массива, считанного из файла «элементы2». Последнее число – ноль, в указанном файле и в распечатке отсутствует, поскольку, если там стоит ноль, то последнее число строки не показывается. Во всех прочих случаях, оно печатается, предваряемое символом решётка, например, так - # 25. Что означает – этот элемент включён в 25-ю группу, и может передвигаться как отдельно, так и в составе элементов такой же группы.
   Передвижение элементов группами, это ещё одна «фишка», вполне вписывающаяся в формат массива векторной графики.

   В текущем каталоге также должна быть размещена папка с названием APat, если мы предполагаем работу с элементами, имеющими логотип 12. Это элементы, растровые изображения которых считываются из файлов формата bmp, находящихся в указанной папке.
   Названия файлов могут быть «pat 1000» - «pat 1999», а также «pat 1000m» - «pat 1999m». Причём файлы с первыми названиями описывают сам рисунок, находящийся на белом фоне, а вторые – чёрную или серую маску этого же рисунка, и тоже на белом фоне.
   О работе с Патами рассказывается тут - http://proza.ru/2020/12/30/1544 

   Есть и ещё одна возможность работать с растровыми изображениями. С ними работает элемент «Паттерн» (логотип 16). Это – изображения небольшого размера, 100х100 или 200х200 пикселей, находящиеся на прозрачном фоне, и они не считываются из внешних файлов, а загружаются в программу на одном, или на двух листах большого рисунка - http://proza.ru/2020/12/26/957
   В отличие от Патов, эти небольшие изображения можно не только передвигать, а также менять их размер, но и поворачивать, создавая при необходимости полноценную анимацию методом перекладки.

   О файлах, содержащих графику в текстовом виде, уже говорилось. Они могут находиться в любом месте, и в рабочей папке, и вне её.

   Особая папка (с любым названием) содержит файлы Архива. Об архивировании читаем здесь - http://proza.ru/2021/04/25/868 и смотрим тут - http://youtu.be/Cy5nGF_MDQQ
   Файл архива должен иметь название, начинающееся с буквы «G». Этот файл, тоже объявленный, как текстовый, таковым не является. Запись в него начинается символами GV (графика векторная), что соответствует целому числу 22087, далее идёт число объединённых в архив файлов, а следом – сами файлы в целочисленном виде, предваряемые каждый – числом строк, содержащихся в нём.
   Кончается запись словом «End», которое никакого значения не имеет, оно чисто декоративное.

   Осталось добавить, что графика, содержащаяся в массиве Pvv, может быть выведена в файл формата SVG и после этого прочитана браузером, или внедрена в другие существующие векторные редакторы. Однако многие тонкости, присущие именно программе DM_Paint, такие, например, как растровые изображения, градиентные или фигурные заливки, не будут поняты, и на конечном рисунке соответствующие векторные элементы и их детали просто не появятся.

ВЫВОДЫ.   Появление общепринятого, и вместе с тем, простого векторного стандарта всё ещё является проблемой.
   Хотя, как мне кажется, описанный формат 16-ти битных целых чисел вполне способен на это. Ещё раз – он
1. Предельно простой
2. Очень компактный
3. Легко читаемый
4. Удобный к использованию
5. Допускающий компактное архивирование
6. Допускающий развитие, в плане, например, добавления новых векторных фигур со своими логотипами.

_________
2.05.2021


Рецензии