1

我是 OpenJPEG 的新手,我正在尝试使用它的库来创建一个 c++ 应用程序,该应用程序接收图像文件并将它们编码为 J2k 格式。我创建默认参数,opj_set_default_encoder_parameters(&params)并设置 outfile 值。使用这些参数,我创建图像image = bmptoimage(filename, &params)并将参数的 x 和 y 设置为图像大小。opj_setup_encoder(encoder, &params, image)返回成功,但代码如下:

opj_start_compress(encoder, image, stream);
opj_encode(encoder, stream);  //seg fault here
opj_end_compress(encoder, stream);

我在 opj_encode 函数中收到信号 11 段错误。

我想我没有设置一个重要的参数,但我找不到任何东西来表明它可能是哪个参数。可能是哪个参数?

也可能是我错误地创建了流对象,stream = opj_stream_create_default_file_stream(params.outfile, OPJ_FALSE);

谢谢

更新

我发现这opj_encode是段错误,因为 opj_start_compress 失败。它失败并出现错误“与图块大小相比,分辨率数量太高”。我已经输入params.numresolution = 1;(0 导致 malloc 错误),但我仍然得到同样的错误。知道为什么opj_start_compress会失败吗?

4

1 回答 1

1

我只是称之为回答。opj_encode失败是因为opj_start_compress没有成功。opj_start_compress在编码修复段错误之前进行检查以验证是否成功。

于 2015-12-23T15:27:33.113 回答