我一直在使用以下代码来读取使用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图像时出错了?
答案 0 :(得分:0)
我的猜测是图像被压缩了。默认情况下,DCMTK仅支持某些形式的压缩。例如,默认情况下不支持JPEG2000。检查图像的传输语法,看它是否是DCMTK支持的压缩格式。有关传输语法的详细信息,请参阅here。