代码如下,暂做记录
QImage *image = 0;
///register RLE decompression codecs
DcmRLEDecoderRegistration::registerCodecs(OFFalse, OFTrue);
/// register JPEG decompression codecs
DJDecoderRegistration::registerCodecs();
DcmFileFormat *fileFormat = new DcmFileFormat();
OFCondition condition = fileFormat->loadFile("test.dcm");
if(!condition.good()) {
qDebug()<<"DcmConvert::set file fail:"<<endl;
return;
}
else {
QImage *image = 0;
DcmDataset * dset = fileFormat->getDataset();
DicomImage *dcmImage = new DicomImage(m_fileFormat, dset->getOriginalXfer(), CIF_MayDetachPixelData);
if (dcmImage != NULL) {
if(dcmImage->getStatus() == EIS_Normal) {
dcmImage->setNoDisplayFunction();
dcmImage->hideAllOverlays();
dcmImage->setNoVoiTransformation();
int width = dcmImage->getWidth();
int height = dcmImage->getHeight();
ulong size = width * height;
if(dcmImage->isMonochrome()) {
uchar *data = new uchar[size];
dcmImage->setMinMaxWindow();
dcmImage->getOutputData(data, size, 8);
image = new QImage(data, width, height, 8, QImage::Format_Mono);
}
else {
size = size * 4;
uchar *data = new uchar[size];
uchar* pixelData = (uchar *)(dcmImage->getOutputData(8));
unsigned long y = 0;
for(unsigned long x = 0; x < size; x+=4) {
data[x] = pixelData[y]; //R
data[x+1] = pixelData[y+1]; //G
data[x+2] = pixelData[y+2]; //B
data[x+3] = 0xFF; //Alpha
y += 3;
}
image = new QImage(data, width, height,QImage::Format_RGBA8888);
}
else {
qDebug() << "Error: cannot load DICOM image (" << DicomImage::getString(dcmImage->getStatus()) << ")" << endl;
}
delete dcmImage;
dcmImage = 0;
}
}
}