Нужен пример jpeglib-turbo, который работает в VS2013 x64

Я пытаюсь научиться пользоваться библиотекой jpeg-turbo. И у меня есть черт времени начала.
Пример example.c в папке doc и каждый отдельный пример, который я нахожу в Интернете, вылетает в VS2013 при попытке прочитать файл .jpg.
Они хорошо компилируются. Но когда я запускаю их, они терпят крах с ошибкой нарушения доступа.

Что мне действительно нужно, так это крошечный рабочий (дружественный для начинающих) пример, который, как известно, правильно работает в VS2013 x64. Включая код блока main () {}.
И если в свойствах проекта VS есть что-то особенное, что мне может понадобиться установить, это может вызвать этот сбой.

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

Спасибо за помощь.

* Edit— Вот очень маленький пример.
Я также пытался заставить jpeglib работать с Boost / GIL и без него
Но всегда происходит сбой при загрузке изображения: исключение 0x00000000774AE4B4 (ntdll.dll)

#include <stdio.h>
#include <assert.h>
#include <jpeglib.h>

#pragma warning(disable: 4996)

int main(int argc, char* argv[])
{
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
JSAMPARRAY buffer;
int row_stride;

//initialize error handling
cinfo.err = jpeg_std_error(&jerr);

FILE* infile;
infile = fopen("source.jpg", "rb");
assert(infile != NULL);

//initialize the decompression
jpeg_create_decompress(&cinfo);

//specify the input
jpeg_stdio_src(&cinfo, infile);

//read headers
(void)jpeg_read_header(&cinfo, TRUE);

jpeg_start_decompress(&cinfo); <----This guy seems to be the culprit

printf("width: %d, height: %d\n", cinfo.output_width, cinfo.output_height);

row_stride = cinfo.output_width * cinfo.output_components;

buffer = (*cinfo.mem->alloc_sarray)
((j_common_ptr)&cinfo, JPOOL_IMAGE, row_stride, 1);

JSAMPLE firstRed, firstGreen, firstBlue; // first pixel of each row, recycled
while (cinfo.output_scanline < cinfo.output_height)
{
(void)jpeg_read_scanlines(&cinfo, buffer, 1);
firstRed = buffer[0][0];
firstBlue = buffer[0][1];
firstGreen = buffer[0][2];
printf("R: %d, G: %d, B: %d\n", firstRed, firstBlue, firstGreen);
}

jpeg_finish_decompress(&cinfo);

return 0;
}

-1

Решение

Я нашел проблему.

В моем VS проекта Linker-> Input-> Дополнительные зависимости. Я изменил его, чтобы использовать turbojpeg-static.lib. Или jpeg-static.lib, когда я использую не турбо улучшенные библиотеки.

Turbojpeg.lib или jpeg.lib по какой-то причине дает сбой при чтении изображения.

К вашему сведению, я использую версию libjpeg-turbo-1.4.2-vc64.exe с VS2013. И вот как я получил его на работу.

0

Другие решения

Еще одна очень важная вещь, которую я узнал, которой я хотел бы поделиться.
При записи в новое изображение .jpg. Если новый размер изображения отличается от исходного изображения. Это обычно вылетает. Особенно если новый размер больше исходного. Я предполагаю, что это происходит потому, что для повторной выборки цветовых данных в другой размер требуется гораздо больше времени. Так что для этого типа действий может потребоваться собственный поток для предотвращения сбоев.

Из-за этого я потратил много времени на погоню за ошибками кода и настройками компилятора. Так что следите за этим.

0

По вопросам рекламы [email protected]