Я новичок в OpenJPEG и пытаюсь использовать его библиотеки для создания приложения на c ++, которое принимает файлы изображений и кодирует их в формат J2k. Я создаю параметры по умолчанию, opj_set_default_encoder_parameters(¶ms)
и установите значение выходного файла. Используя эти параметры, я создаю изображение image = bmptoimage(filename, ¶ms)
и установите x и y параметров к размеру изображения. opj_setup_encoder(encoder, ¶ms, image)
возвращает успешно, но следующий код:
opj_start_compress(encoder, image, stream);
opj_encode(encoder, stream); //seg fault here
opj_end_compress(encoder, stream);
Я получаю сигнал об ошибке 11 seg в функции opj_encode.
Я думаю, что я не устанавливаю важный параметр, но я не могу найти ничего, чтобы указать, каким параметром это может быть. Какой параметр это может быть?
Также может быть, что я неправильно создаю объект потока, stream = opj_stream_create_default_file_stream(params.outfile, OPJ_FALSE);
Спасибо
ОБНОВИТЬ
Я понял, что opj_encode
является ошибкой сегмента, потому что opj_start_compress терпит неудачу. Сбой при ошибке «Количество разрешений слишком велико по сравнению с размером тайлов». Я вошел params.numresolution = 1;
(0 вызывает ошибку malloc), но я все еще получаю ту же ошибку. Любая идея, почему opj_start_compress
потерпит неудачу?
Я просто назвал это ответом. opj_encode
терпит неудачу, потому что opj_start_compress
не удается. Ввод чека, чтобы проверить успех opj_start_compress
перед кодированием исправлена ошибка сегмента.
Других решений пока нет …