2015-12-22 49 views
1

我是OpenJPEG的新手,並且正在嘗試使用它的庫來創建一個接受圖像文件並將它們編碼爲J2k格式的C++應用程序。我創建了默認參數opj_set_default_encoder_parameters(&params)並設置了outfile值。使用這些參數,我創建圖像image = bmptoimage(filename, &params)並將參數的x和y設置爲圖像大小。 opj_setup_encoder(encoder, &params, image)成功返回,但下面的代碼:OpenJPEG的opj_encode是段錯誤

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);

感謝

UPDATE

我已經想通了,opj_encode是賽格斷層,因爲opj_start_compress失敗。它會因錯誤「分辨率的數量與平鋪的大小相比太高」而失敗。我輸入了params.numresolution = 1;(0導致malloc錯誤),但我仍然得到相同的錯誤。任何想法爲什麼opj_start_compress會失敗?

回答

1

我只是這樣回答。 opj_encode由於opj_start_compress未成功而失敗。在編碼前檢查opj_start_compress的成功驗證,確定seg故障。