我正在尝试使用 Qt Creator 作为开发环境将 dicom.dcm
文件转换为.jpeg
在 C++ 应用程序中使用 Imebra。
我已经下载了 Imebra,并且能够成功运行 Qt 项目示例以进行 Dicom2Jpeg 转换。但是当我尝试将相同的代码复制到我的 C++ 应用程序时,它无法运行并出现以下错误消息:
malloc: *** error for object xxxxxx: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
我已按照 Imebra 网站上显示的将 Imebra 文件添加到我的项目的步骤进行操作。还以他们的 qt 项目为例。我main.cpp
打开的 dicom 文件,然后将其加载到数据集,然后调用我的对话窗口。它在加载数据集时崩溃。
#include "QApplication.h"
#include "QHBoxLayout.h"
#include "mydialog.h"
#include "iostream.h"
include "library/imebra/include/imebra.h"
int main( int argc, char ** argv ){
using namespace puntoexe;
ptr<stream> readStream(new stream);
readStream->openFile("/pathToDcmFile/test.dcm",std::ios_base::in);
ptr<streamReader> reader(new streamReader(readStream));
ptr<imebra::codecs::codecFactory>
cFactory(imebra::codecs::codecFactory::getCodecFactory());
ptr<imebra::dataSet> tdataSet;
tdataSet=cFactory->load(reader,2048);
Q_INIT_RESOURCE(images);
QApplication a( argc, argv );
MyDialog md;
md.show();
return a.exec();
}
更深入的调试表明,在检查 JpegSignature 以查看其格式是否错误时,错误的根源在于JpegCodec.cpp
文件readStream()
函数,从而导致内部 PUNTOEXE 错误“检测到错误的格式”。
有趣的是,在使用给定的 dicom2jpeg 示例(具有完全相同的打开文件和加载它的代码)运行相同的测试 dcm 文件时,没有错误并成功转换为 jpeg。所以我知道这不是文件问题,而是 imebra 代码集成到我的 C++ 应用程序中的方式。
我的开发环境:带有 Lion OS、Qt Creator、Qt 项目、C++ 代码、添加了 ITK 库的 macbook pro、Imebra 文件完全集成为 Qt 项目的一部分。
所以,我的问题是如何在 Qt 项目中工作/链接/引用/调用 Imebra 功能?我是否忘记链接某些东西,或者某些对象没有按时实例化/删除?
任何想法都受到高度赞赏,
埃武什卡
解决方案:正如建议的那样,我已将编解码器工厂更改为 dicm 工厂并解决了问题。我的新代码如下。
imebra::codecs::dicomCodec* pTmp = new imebra::codecs::dicomCodec();
ptr<stream> readStream(new stream);
readStream->openFile(argv[0],std::ios_base::in);
ptr<streamReader> reader(new streamReader(readStream));
ptr<imebra::dataSet> tdataSet;
tdataSet=pTmp->read(reader,2048);
delete pTmp;