JPEG — сжатие файла DICOM с помощью DCMTK (C ++)

черт, я очень расстроен …

Следуя примеру на этой странице http://support.dcmtk.org/docs/mod_dcmjpeg.html, Я написал программу на C ++ для распаковки сжатого JPEG файла изображения DICOM

Теперь я хочу сделать наоборот: от несжатого до сжатого, и если я использую другой пример на той же странице, с тем же (или другим файлом) кодом, который компилируется и запускается, но не может сжать файл …

Я видел, что следующий код, оригинал Xfer и Current один и тот же, и это не хорошо, потому что нужно отличаться

dataset->chooseRepresentation(EXS_JPEGProcess14SV1, &params);

Это как 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());
}

и результат ЛОЖЬ ….

Как я могу это исправить? У кого-то есть код, который работает для сжатия изображения DICOM с помощью DCMTK или другой библиотеки

Это полный код:

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, &params);

// 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;
}

1

Решение

При попытке сжать изображение нужно позвонить

DJEncoderRegistration::registerCodecs();

Распаковка

DJDecoderRegistration::registerCodecs();
3

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector