我是OpenJPEG的新手,我正在尝试使用其库创建一个c ++应用程序,它接收图像文件并将其编码为J2k格式。我创建默认参数opj_set_default_encoder_parameters(¶ms)
并设置outfile值。使用这些参数,我创建图像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);
我在opj_encode函数中得到一个11 seg错误信号。
我想我没有设置一个重要的参数,但我找不到任何东西来指示它可能是哪个参数。它可能是哪个参数?
也可能是我正在错误地创建流对象stream = opj_stream_create_default_file_stream(params.outfile, OPJ_FALSE);
由于
更新
我已经发现opj_encode
是分段错误,因为opj_start_compress失败了。它失败并出现错误“与瓦片大小相比,分辨率的数量太高”。我输入params.numresolution = 1;
(0导致malloc错误),但我仍然得到相同的错误。知道为什么opj_start_compress
会失败吗?
答案 0 :(得分:1)
我只是称之为回答。 opj_encode
失败,因为opj_start_compress
没有成功。在编码之前进行检查以验证opj_start_compress
是否成功修复了seg故障。