Вопрос или проблема
Мне нужна минимальная библиотека, которая позволит мне читать/записывать/обрабатывать растровые форматы изображений, такие как BMP и PNG.
Написанная на C99 или C11 или другой переносимой платформе.
Есть ли какие-либо рекомендации?
Редактировать
Мне нужно:
- загружать bmp
- получать информацию о bmp, такую как ширина, данные, глубина и т.д.
- доступ к матричным данным BMP
- предпочтительно, уменьшать до 1 бита на пиксель
- предпочтительно, сохранять результат в файл
Редактировать
Кроссплатформенный для Windows и Linux (и Android). Цель – читать данные BMP (или PNG), возможно, обрабатывать их (дизеринг и горизонтальная подгонка – можно сделать позже), а затем отправлять данные на термопринтеры с использованием ESC/POS.
Два кандидата на бесплатное программное обеспечение:
- Imlib2 – загрузка и рендеринг изображений (тем не менее, больше не поддерживается)
- ImageMagick, универсальный процессор изображений с интерфейсом командной строки и различными API – C API называется MagickWand
Ответ или решение
Для работы с растровыми изображениями в языке C, в том числе для чтения и записи форматов BMP и PNG, существуют несколько надежных библиотек, которые соответствуют вашим требованиям. Рассмотрим несколько из них:
-
stb_image / stb_image_write: Эти библиотеки являются частью набора библиотек stb, написанных в C. Они карманные (single-file) библиотеки, которые легко интегрировать в ваш проект. Эти библиотеки поддерживают форматы BMP, PNG и другие. Вы можете использовать их для загрузки изображений, получения информации о них, а также для записи измененных изображений.
- Документация и GitHub: stb
Пример использования для загрузки BMP:
#define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" int width, height, channels; unsigned char *data = stbi_load("image.bmp", &width, &height, &channels, 0); if (data) { // Обработка данных изображения stbi_image_free(data); }
-
libpng: Это библиотека специфична для работы с PNG-изображениями. Она предоставляет гораздо более широкие возможности для манипуляции изображениями, чем просто загрузка и сохранение. Вы можете использовать её для чтения PNG-изображений и получения их атрибутов. Однако, для работы с BMP вам потребуется другая библиотека, так как libpng поддерживает только PNG.
- Документация и официальный сайт: libpng
-
GD: Библиотека GD представляет собой мощный инструмент для создания и манипуляции изображениями. Она поддерживает множество форматов, включая BMP и PNG. GD позволяет не только загружать и сохранять изображения, но и выполнять различные операции, такие как изменение размера, обрезка и создание сложных графических объектов.
- Документация и GitHub: libgd
-
ImageMagick: Это хорошо известная библиотека для обработки изображений, которая поддерживает более 200 форматов. Она может показаться более сложной для использования из-за массивного API, но если вам нужно много возможностей для обработки изображений, это отличный выбор.
- Документация и официальные ссылки: ImageMagick
-
Imlib2: Хотя эта библиотека, как упоминалось, больше не поддерживается, она все еще может быть использована для базовой работы с изображениями. Однако, для новых проектов я бы рекомендовал рассмотреть другие более активно поддерживаемые библиотеки.
Для вашего конкретного случая, когда вы хотите загрузить BMP, получить информацию о размере и данных, а затем манипулировать изображениями (например, использовать дезеринг и записывать обратно в файл), я бы рекомендовал начать с stb_image и stb_image_write для работы с BMP, а также libpng для работы с PNG. Эти библиотеки достаточно просты и позволят вам достичь желаемого результата, сохраняя при этом портативность кода между различными операционными системами (Windows и Linux).
Таким образом, вы сможете реализовать функционал, который вам нужен для работы с изображениями и последующей передачей данных на термопринтеры с использованием ESC/POS.