альтернативы jpeg_read_header libjpeg - PullRequest
3 голосов
/ 04 ноября 2010

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

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

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

Ответы [ 5 ]

2 голосов
/ 04 ноября 2010

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

1 голос
/ 29 мая 2019

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

// 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

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

1 голос
/ 04 ноября 2010

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

  1. jpeg_CreateDecompress
  2. jpeg_read_header
  3. jpeg_start_decompress
  4. jpeg_read_raw_data / jpeg_read_scanlines
  5. jpeg_destroy_decompress
1 голос
/ 04 ноября 2010

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

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

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

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

0 голосов
/ 25 августа 2016

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

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

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

...