使用 DCMTK 压缩 DICOM 文件 (C++)
Compress DICOM file with DCMTK (C++)
该死的我很沮丧...
按照本页 http://support.dcmtk.org/docs/mod_dcmjpeg.html 中的示例,我编写了一个C++程序来解压缩JPEG压缩的DICOM图像文件
现在我想反之亦然,从未压缩到压缩,如果我在同一页面中使用另一个示例,使用相同的(或其他文件)代码编译并运行,但无法压缩文件......
我看到下面的代码,原来的Xfer和电流是一样的,这不好,因为需要不同
dataset->chooseRepresentation(EXS_JPEGProcess14SV1, ¶ms);
就像chooseRepresentation
方法失败了一样。
更多线路
dataset->canWriteXfer(EXS_JPEGProcess14SV1)
返回假
我在 dcpixel.cc 文件中看到,调试代码进入
DcmPixelData::canChooseRepresentation(.........
....
....
// representation not found, check if we have a codec that can create the
// desired representation.
if (original == repListEnd)
{
result = DcmCodecList::canChangeCoding(EXS_LittleEndianExplicit, toType.getXfer());
}
结果是错误的。
我该如何解决它?有人有一个代码可以使用DCMTK或其他库压缩DICOM图像
这是完整的代码:
int main()
{
//dcxfer.h
DJDecoderRegistration::registerCodecs(); // register JPEG codecs
DcmFileFormat fileformat;
/**** MONO FILE ******/
if (fileformat.loadFile("Files/cnv3DSlice (1)_cnv.dcm").good())
{
DcmDataset *dataset = fileformat.getDataset();
DcmItem *metaInfo = fileformat.getMetaInfo();
DJ_RPLossless params; // codec parameters, we use the defaults
// this causes the lossless JPEG version of the dataset to be created
dataset->chooseRepresentation(EXS_JPEGProcess14SV1, ¶ms);
// check if everything went well
if (dataset->canWriteXfer(EXS_JPEGProcess14SV1))
{
// force the meta-header UIDs to be re-generated when storing the file
// since the UIDs in the data set may have changed
delete metaInfo->remove(DCM_MediaStorageSOPClassUID);
delete metaInfo->remove(DCM_MediaStorageSOPInstanceUID);
// store in lossless JPEG format
fileformat.saveFile("Files/test_jpeg_compresso.dcm", EXS_JPEGProcess14SV1);
}
}
DJDecoderRegistration::cleanup(); // deregister JPEG codecs
return 0;
}
尝试压缩图像时,您需要调用
DJEncoderRegistration::registerCodecs();
解压缩是
DJDecoderRegistration::registerCodecs();
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到