Как программы взаимодействуют с графическими библиотеками? - PullRequest
0 голосов
/ 03 марта 2019

Я хочу создать свой собственный формат изображения и библиотеку для его чтения.

Я несколько раз пытался донести эту информацию до людей, все они сказали: «Иди изучи один из существующих графических SDK»."и я сделал, и это ничему не научило, это только научило меня, как использовать Open GL ... это не то, что я хотел.Я хочу знать внутреннюю работу, которая происходит, когда программа открывает изображение, поэтому я могу обработать эту операцию вручную в моей собственной библиотеке.

Я изучил несколько форматов изображений, я знаю, как информация в нихпостроен, но после того, как программа открывает их, она должна знать, как преобразовать их в массив RGBA, верно?я полагаю, в этом и заключается графическая библиотека?

Графическая библиотека представляет собой список инструкций о том, как читать изображение как массив шестнадцатеричных цветов, которые я предполагаю?так что на самом деле у меня есть 3 вопроса, и я надеюсь прояснить их:

1: Что происходит в программе, когда она представлена ​​с файлом изображения?например, он ищет графическую библиотеку с таким расширением файла как его имя (и где?), а затем читает правила для преобразования этого в список значений цвета?или он преобразует его непосредственно в машинный код и хранит его в памяти?

2: Если бы я написал одну из этих графических библиотек, как бы я убедился, что программы могут ее найти?Обычно (учитывая пример графического редактора или игрового движка, или предварительного просмотра изображений Windows и т. Д.) Программа автоматически видит новые библиотеки изображений или мне нужно изменить программу, чтобы она знала, что она существует?(этот ответ даст мне знать, сколько будет хлопот)

3: Существует ли какой-то стандартный формат данных, в котором все графические приложения хранят данные о цвете изображения?

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

1: Что происходит в программе, когда она представлена ​​с файлом изображения?

Обычно запрашивается операционная система для декодирования изображения.Операционная система, вероятно, будет иметь ряд библиотек, которые она использует, так же как LibTIFF , libpng , libjpeg и т. Д.

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

например, он ищет графическую библиотеку с таким расширением файла, как его имя (и где?), А затем читает правила для преобразования этого в список значений цвета?

Обычно существует интерфейс более высокого уровня, который предоставляет ОС.Например, в macOS есть CoreGraphics и ImageIO .

, или он преобразует его непосредственно в машинный код и сохраняет его в памяти?

В файлах изображений нет машинного кода.(Ну, обычно нет. Я уверен, что кто-то где-то это сделал.) Файлы изображений хранят только данные, как правило, простым способом.Библиотека может распаковывать и / или декодировать данные, и в этот момент у вас есть что-то, что, вероятно, RGBA (или вариация типа ARGB или BGRA), или YCbCr, или что-то подобное.ОС может выполнить дальнейшие преобразования, чтобы получить точный тип данных, запрошенный вызывающей стороной.

2: Если бы я написал одну из этих графических библиотек, как бы мне было убедиться, что программы могут ее найти?

Обычно есть способ зарегистрировать ваш кодек изображения в операционной системе, чтобы он был доступен для программ.Это зависит от ОС.

Обычно (с учетом примера редактора изображений, игрового движка, предварительного просмотра изображений Windows и т. Д.) Программа автоматически просматривает новые библиотеки изображений или мне нужно изменитьпрограмма, чтобы знать, что она существует?(этот ответ даст мне знать, сколько будет хлопот)

Это зависит от программы.Некоторые разрешают только определенные форматы, некоторые будут использовать любой формат, поддерживаемый ОС.Некоторые дополнительно добавляют поддержку других форматов, которые обычно не поддерживаются ОС.Фотошоп, например, позволяет разработчикам создавать собственные импортеры и экспортеры изображений.Если у пользователя установлен ваш импортер / экспортер, он получает функциональность, в противном случае он не получает (если ОС не поддерживает его).

3: существует ли какой-либо стандартный формат данных, который хранится во всех графических приложенияхДанные о цвете изображения в?

Существует несколько распространенных - .png, .jpg и .tif - все они широко поддерживаются.Даже файлы .psd (Photoshop) обрабатываются во многих случаях, хотя не все функции работают во всех случаях.

0 голосов
/ 03 марта 2019

1: Хотя расширение файла может использоваться некоторыми программами, большинство будет смотреть на данные заголовка.Большинство форматов имеют своего рода заголовок, который дает информацию, которая определяет, как будет обрабатываться информация, поэтому библиотека может спросить: «Похоже ли заголовок этого файла на файл, к которому вы можете получить доступ?»

Вот пример библиотеки, используемой для декодирования файлов png, используемых многими программами, включая Gimp: https://sourceforge.net/p/libpng/code/ci/master/tree/png.c

Возвращает данные цвета в виде 32-битных целых чисел, называемых png_int_32.Внизу этой страницы вы можете увидеть список библиотек, используемых Gimp для декодирования различных форматов изображений: https://www.gimp.org/source/#gimp-source-code

2: Некоторые программы жестко запрограммированы для использования определенных библиотек и не могут быть расширены новымиформаты.Большие графические программы, такие как Photoshop или Gimp, используют плагины.Вам придется создавать плагины, которые используют вашу библиотеку для программ, которые вы хотите поддерживать.Вот как создать плагин Gimp: https://developer.gimp.org/writing-a-plug-in/1/index.html

Вот как создать плагин Photoshop: https://www.adobe.io/apis/creativecloud/photoshop.html

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

3: Хранение данных изображения в 32-битном формате довольностандарт.Легко использовать, легко выровнять в памяти и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...