Получить размеры JPEG в C ++ - PullRequest
5 голосов
/ 25 ноября 2008

Мне нужно получить размеры изображения JPEG в C ++. Я ищу достаточно простой способ сделать это или небольшую библиотеку, которая обеспечивает эту функциональность. Я работаю в C ++ над OpenVMS, поэтому любые внешние библиотеки, возможно, придется адаптировать для компиляции в наших системах - поэтому, пожалуйста, не размещайте мне ссылки на большие библиотеки с закрытым исходным кодом!

Кто-нибудь сталкивался с чем-нибудь, что могло бы сделать трюк, или понять формат файла JPEG (я думаю, что я, вероятно, имею в виду формат файла JFIF здесь), чтобы сказать мне, как я мог бы пойти на развертывание моего собственного решения?

Ответы [ 6 ]

13 голосов
/ 25 ноября 2008

У вас есть функция C , которая может извлечь для вас соответствующие данные.

Это подпрограмма C, но она должна прекрасно компилироваться с C ++.
Передайте ему обычный указатель FILE (из fopen) в начало файла JPEG и два указателя int, которые будут установлены с высотой и шириной изображения.

Или вы можете найти в библиотеке Boost класс jpeg с нужной функцией (из Adobe Универсальная библиотека изображений ).

jpeg_read_dimensions

boost::gil::jpeg_read_dimensions (const char *filename)

Возвращает ширину и высоту файла JPEG в указанном месте. Выдает std :: ios_base :: fail, если местоположение не соответствует допустимому файлу JPEG.

3 голосов
/ 25 ноября 2008

libjpeg достаточно маленький, с открытым исходным кодом и доступен на OpenVMS. Вероятно, установить его быстрее, чем работать с JPEG самостоятельно.

2 голосов
/ 25 ноября 2008

Может быть libjpeg ?

1 голос
/ 20 января 2010

Возможно, вы захотите попробовать библиотеку GDAL , которая служит уровнем абстракции для большого числа форматов растровых данных, в основном используемых в геопространственных приложениях для ГИС / РС.

GDAL предоставляет ряд API для C, C ++ и языков сценариев. Конечно, он поддерживает JPEG изображения и его варианты, такие как JPEG2000 и другие.

Вот очень простой пример, как открыть изображение JPEG и запросить его размеры:

#include <gdal_priv.h>

GDALAllRegister(); // call ones in your application

GDALDataset* ds = (GDALDataset*)GDALOpen("my.jpeg", GA_ReadOnly);
int width  = ds->GetRasterXSize();
int height = ds->GetRasterYSize(),
int nbands = ds->GetRasterCount();

Проверьте Учебник GDAL API для более полного примера.

1 голос
/ 25 ноября 2008

Нет необходимости в полной библиотеке libjpeg только для того, чтобы получить эту информацию (если вам не нужно делать что-то еще с изображениями). ImageInfo может вам помочь. Это класс Java, но есть порты для других языков, включая C ++.
Как указывалось, Exif может изменить эту информацию (например, с настройкой ориентации).

1 голос
/ 25 ноября 2008

Вы должны иметь возможность использовать jpeg lib с этим патчем для OpenVMS

...