Как открыть PNG с библиотекой CImg без потери альфа-канала?

Когда я открываю файл png:

CImg<unsigned char> image("image.png");

... Я ожидаю получить 4-канальное (RGBA) изображение. Но вместо этого я всегда получаю 3-канальное (RGB) изображение (даже если изображение полупрозрачное): image.spectrum() возвращает 3 вместо 4.

В моем приложении мне всегда нужно получить 4 канала, когда я открываю файл PNG. CImg выглядит как популярная библиотека с множеством полезных функций (некоторые из которых могут быть полезны в будущем в моем приложении для обработки изображений), поэтому мне трудно поверить, что невозможно открыть файл PNG с альфа-каналом, не потеряв его. Какие-либо предложения?

Если CImg не очень хороший инструмент для работы с файлами PNG, не стесняйтесь предложить какую-нибудь другую простую в использовании библиотеку. На данный момент для меня важна только возможность читать и записывать PNG как 4-канальное беззнаковое символьное изображение и иметь функции для получения размеров и данных изображения (например, image.width() или image.data() ).


person Lissanro Rayen    schedule 23.08.2012    source источник


Ответы (2)


CImg — очень хорошая библиотека для работы с файлами .png (в т.ч. 4-канальными). Для встроенной поддержки файлов png в CImg вам необходимо связать свой код с библиотекой libpng, иначе CImg будет использовать внешний вызов инструмента преобразования ImageMagick для чтения файла .png. Чтобы включить полную поддержку .png в CImg, просто скомпилируйте свой код с определенным макросом 'cimg_use_png' и свяжите его с libpng, и все готово:

g++ -o foo foo.cpp -Dcimg_use_png -lpng -lz -lX11 -lpthread

Я обнаружил, что CImg является одной из библиотек с наиболее полной поддержкой файлов .png и .tiff, вам нужно только определить некоторые флаги конфигурации, чтобы разрешить использование соответствующих библиотек. По умолчанию CImg настроен на использование минимального набора библиотек.

person cjuliard    schedule 23.08.2012

Предложение для другой библиотеки (которую я использовал, и imo довольно проста): http://www.imagemagick.org/script/api.php#c

person Samaursa    schedule 23.08.2012