Альтернативы jpeg_read_header libjpeg

Поэтому я сталкиваюсь с проблемой использования libjpeg в Windows, которая вызывает сбой jpeg_read_header().

Проблема (довольно весело) описана здесь: http://sourceforge.net/projects/gnuwin32/forums/forum/74807/topic/1629371?message=4053776

Я выбрал третий вариант, который не использует API jpeg_stdio_src / dest. Однако, после долгих поисков, я не могу найти "другие способы подачи данных в libjpeg", упомянутые в конце поста, может кто-нибудь указать мне правильное место?

4 ответа

Люди Sompe сообщают об обходном пути для проблемы со связыванием с msvcrt в более новой визуальной студии. Нашел googling msvcrt.dll "визуальная студия"

Одним из "других способов подачи данных" являются следующие функции:

  1. jpeg_CreateDecompress
  2. jpeg_read_header
  3. jpeg_start_decompress
  4. jpeg_read_raw_data / jpeg_read_scanlines
  5. jpeg_destroy_decompress

Если я правильно понимаю проблему, это из-за различий между всеми дескрипторами файлов в Windows. Они не все совместимы друг с другом.

Будет ли эта ссылка полезной? он говорит вам, как конвертировать между ними все. Затем вы можете указать правильный тип дескриптора файла для функции и запустить его.

http://www.codeproject.com/KB/files/handles.aspx

В качестве альтернативы, не используйте эту библиотеку jpeg, а используйте другую. Я не могу порекомендовать ни одного, поскольку у меня не было необходимости использовать библиотеку jpeg раньше.

У меня была аналогичная проблема, и я наткнулся на этот пост, когда искал решения. В конце концов, я просто возился с кодом, потому что для меня было критически важно читать прямо из файла. Чтобы исправить, я сделал следующее:

// Declare needed structs
struct jpeg_decompress_struct dinfo;
struct jpeg_error_mgr jerr;

// Open file
FILE * infile = fopen("myimage.jpg", "rw");

// Create error manager instance
dinfo.err = jpeg_std_error(&jerr);

// Decompression process
jpeg_create_decompress(&dinfo);
jpeg_stdio_src(&dinfo, infile);
jpeg_read_header(&dinfo, TRUE);

// ... remainder of program

Обе функции работают нормально и, как и ожидалось, после этого... Я не уверен, почему это устранило мою проблему, но я возьму ее. Надеюсь, это поможет кому-то другому.

Недавно я столкнулся с той же проблемой с libjppeg-turbo. Я не хотел перекомпилировать библиотеку или связать mscvr.dll с моим приложением vs2015.

Эта функция работает для меня: jpeg_mem_src(...) Вместо того, чтобы использовать jpeg_stdio_src, Так как он не передает никакие структуры времени выполнения C в библиотеку, он работает просто отлично. Определение функции можно найти здесь по ссылке

Он получает входные данные из буфера памяти, а не из файла, который работает, если ваш файл не слишком большой / память не представляет особой проблемы.

Другие вопросы по тегам