如何从DIcom图像中提取像素数据,以便在iPhone中查看

时间:2013-02-26 12:24:10

标签: iphone ios ipad image-processing dicom

我一直在使用以下代码来读取使用DCMTK框架工作的dicom图像,以便在UIImage视图中显示它。

NSString *dcmFilename   = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"dcm"];
 const void* buffer = dcmFilename;


// Set the dimensions of the current context
size_t width = 250; // set manually, but correct
size_t height = 252;

// 1 byte per component
size_t bitsPerComponent = 8;





bitsPerComponent *= 2; // short = 2 byte

size_t bitsPerPixel, bytesPerRow;
CGColorSpaceRef colorSpace;
CGBitmapInfo bitmapInfo;
CGDataProviderRef theDataProvider;
CFDataRef theDataReference;
bool shouldInterpolate = NO;
CGColorRenderingIntent theIntent;


bitsPerPixel = bitsPerComponent * 1; // because of grayscale image
colorSpace = CGColorSpaceCreateDeviceGray();
bitmapInfo = kCGImageAlphaNone | kCGBitmapByteOrder32Big;

// cg data provider to build the cg image
const UInt8* rawData = static_cast<const UInt8*>(buffer);

// For some reason initiating a CGImage uses BITS per pixel, so we need to divide by 8 to get BYTES
// per pixel
bytesPerRow = (bitsPerPixel/8) * width;

theDataReference = CFDataCreate(NULL,
                                rawData,
                                (bytesPerRow*height));

theDataProvider = CGDataProviderCreateWithCFData(theDataReference);





// Finally create the image reference
CGImageRef theImageRef = CGImageCreate(width,
                                       height,
                                       bitsPerComponent,
                                       bitsPerPixel,
                                       bytesPerRow,
                                       colorSpace,
                                       bitmapInfo,
                                       theDataProvider,
                                       nil,
                                       shouldInterpolate,
                                       theIntent);


// Construct an output image
UIImage *myImage = [UIImage imageWithCGImage:(theImageRef)];
NSLog(@"image-- %@", myImage);
patientImageView.image = myImage;

我得到了这个输出。我在处理dcm图像时出错了? enter image description here

1 个答案:

答案 0 :(得分:0)

我的猜测是图像被压缩了。默认情况下,DCMTK仅支持某些形式的压缩。例如,默认情况下不支持JPEG2000。检查图像的传输语法,看它是否是DCMTK支持的压缩格式。有关传输语法的详细信息,请参阅here