Декодируйте JPEG для получения несжатых данных - PullRequest
3 голосов
/ 17 июня 2009

Я хочу декодировать файлы JPEG и получить несжатый декодированный вывод в формате BMP / RGB. Я использую GNU / Linux и C / C ++.

Я посмотрел на libjpeg, но, похоже, не было никакой доступной документации. Итак, мои вопросы:

  1. Где находится документация по libjpeg?
  2. Можете ли вы предложить другие библиотеки jpeg-декомпрессии на основе C?

Ответы [ 5 ]

6 голосов
/ 17 июня 2009

Документация для libjpeg поставляется с исходным кодом. Так как вы еще не нашли его:

Загрузите архив исходного кода и откройте файл libjpeg.doc . Это обычный файл ASCII, а не документ Word, поэтому лучше откройте его в блокноте или другом редакторе ASCII.

Есть и другие файлы .doc. Хотя большинство из них не такие интересные.

К сожалению, я не могу рекомендовать любую другую библиотеку, кроме libjpeg. Я попробовал пару альтернатив, но Libjpeg всегда побеждал. С ним довольно легко работать, если вы уже освоили основы. Кроме того, это самая полная и самая стабильная библиотека jpeg.

2 голосов
/ 17 июня 2009

Вы должны проверить QImage Qt. У него довольно простой интерфейс, который делает эту задачу действительно простой. Настройка довольно проста для любой платформы.

Если Qt является избыточным, вы можете попробовать Magick ++ http://www.imagemagick.org/Magick++/.. Он поддерживает подобные операции и также хорошо подходит для такого рода задач. В прошлый раз, когда я использовал его, я немного боролся с зависимостями для него в Windows, но не помню особых проблем в Linux.

Для класса Image в Magick ++ вам, вероятно, понадобится функция getConstPixels.

2 голосов
/ 17 июня 2009

MagickWand - это C API для ImageMagick:

http://imagemagick.org/script/magick-wand.php

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

1 голос
/ 18 июня 2009

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

Форматы pbm могут быть такими же простыми, как простой заголовок ASCII, за которым следуют данные RGB в ASCII или двоичном формате. Предполагается, что они достаточно просты в использовании и не требуют библиотеки для реализации.

JPEG поддерживается в netpbm фильтрами чтения и записи, которые реализованы поверх libjpeg.

1 голос
/ 18 июня 2009

У меня есть код, который вы можете скопировать (или просто использовать в качестве ссылки) для загрузки изображения в формате JPEG с использованием библиотеки libjpeg.

Вы можете просмотреть код здесь: http://code.google.com/p/kgui/source/browse/trunk/kguiimage.cpp

Просто поищите функцию LoadJPGImage .

Код настроен для обработки привязки c ++ моего DataHandle класса к нему для загрузки изображения, таким образом, изображение может быть файлом или данными, уже находящимися в памяти или чем-то еще.

...