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





Может libjpeg?
У вас есть этот Функция C, который может извлекать для вас соответствующие данные.
This is a C routine but should compile fine with C++.
Pass it a normal FILE pointer (from fopen) to the beginning of a jpeg file and two int pointers to be set with the image height and width.
Или вы можете найти в Библиотека Boost класс jpeg, который имеет правильную функцию (из AdobeУниверсальная библиотека изображений).
boost::gil::jpeg_read_dimensions (const char *filename)
Returns the width and height of the JPEG file at the specified location. Throws std::ios_base::failure if the location does not correspond to a valid JPEG file.
Поздравляю вас обоих!
return Many Happy return Many Happy!
@VonC первая ссылка мертва, а вот другая, выглядит так же? carnage-melon.tom7.org/stuff/jpegsize.html
@ Стив Спасибо. Первая ссылка исправлена.
Вы должны иметь возможность использовать этот jpeg lib с этим патч для OpenVMS
libjpeg - это достаточно маленький файл с открытым исходным кодом, доступный на OpenVMS. Вероятно, установить его быстрее, чем обрабатывать JPEG самостоятельно.
Нет необходимости в полной библиотеке libjpeg только для получения этой информации (если вам не нужно делать что-то еще с изображениями). ImageInfo может вам помочь. Это класс Java, но есть порты и для других языков, включая C++.
Как уже отмечалось, Exif может изменить эту информацию (например, с помощью настройки ориентации).
Вы можете попробовать библиотеку ГДАЛ, которая служит уровнем абстракции для большого количества форматов растровых данных, в основном используемых в геопространственных приложениях для ГИС / ДЗ.
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 для более полного примера.
Извините за опоздание - просто исчез, чтобы жениться! Снова за свой стол :-(. Я выбрал процедуру C (хотя #defines вверху УЖАСНО - переписал их как функции).