Есть ли надежная растровая библиотека на C?

Вопрос или проблема

Мне нужна минимальная библиотека, которая позволит мне читать/записывать/обрабатывать растровые форматы изображений, такие как BMP и PNG.

Написанная на C99 или C11 или другой переносимой платформе.

Есть ли какие-либо рекомендации?

Редактировать
Мне нужно:

  • загружать bmp
  • получать информацию о bmp, такую как ширина, данные, глубина и т.д.
  • доступ к матричным данным BMP
  • предпочтительно, уменьшать до 1 бита на пиксель
  • предпочтительно, сохранять результат в файл

Редактировать

Кроссплатформенный для Windows и Linux (и Android). Цель – читать данные BMP (или PNG), возможно, обрабатывать их (дизеринг и горизонтальная подгонка – можно сделать позже), а затем отправлять данные на термопринтеры с использованием ESC/POS.

Два кандидата на бесплатное программное обеспечение:

  • Imlib2 – загрузка и рендеринг изображений (тем не менее, больше не поддерживается)
  • ImageMagick, универсальный процессор изображений с интерфейсом командной строки и различными API – C API называется MagickWand

Ответ или решение

Для работы с растровыми изображениями в языке C, в том числе для чтения и записи форматов BMP и PNG, существуют несколько надежных библиотек, которые соответствуют вашим требованиям. Рассмотрим несколько из них:

  1. 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);
    }
  2. libpng: Это библиотека специфична для работы с PNG-изображениями. Она предоставляет гораздо более широкие возможности для манипуляции изображениями, чем просто загрузка и сохранение. Вы можете использовать её для чтения PNG-изображений и получения их атрибутов. Однако, для работы с BMP вам потребуется другая библиотека, так как libpng поддерживает только PNG.

    • Документация и официальный сайт: libpng
  3. GD: Библиотека GD представляет собой мощный инструмент для создания и манипуляции изображениями. Она поддерживает множество форматов, включая BMP и PNG. GD позволяет не только загружать и сохранять изображения, но и выполнять различные операции, такие как изменение размера, обрезка и создание сложных графических объектов.

    • Документация и GitHub: libgd
  4. ImageMagick: Это хорошо известная библиотека для обработки изображений, которая поддерживает более 200 форматов. Она может показаться более сложной для использования из-за массивного API, но если вам нужно много возможностей для обработки изображений, это отличный выбор.

    • Документация и официальные ссылки: ImageMagick
  5. Imlib2: Хотя эта библиотека, как упоминалось, больше не поддерживается, она все еще может быть использована для базовой работы с изображениями. Однако, для новых проектов я бы рекомендовал рассмотреть другие более активно поддерживаемые библиотеки.

Для вашего конкретного случая, когда вы хотите загрузить BMP, получить информацию о размере и данных, а затем манипулировать изображениями (например, использовать дезеринг и записывать обратно в файл), я бы рекомендовал начать с stb_image и stb_image_write для работы с BMP, а также libpng для работы с PNG. Эти библиотеки достаточно просты и позволят вам достичь желаемого результата, сохраняя при этом портативность кода между различными операционными системами (Windows и Linux).

Таким образом, вы сможете реализовать функционал, который вам нужен для работы с изображениями и последующей передачей данных на термопринтеры с использованием ESC/POS.

Оцените материал
Добавить комментарий

Капча загружается...