我正在尝试读取 12 位灰度 (DICOM:MONOCHROME2) 图像。我可以很好地读取 DICOM RGB 文件。当我尝试将灰度图像加载到 NSBitmapImageRep 中时,我收到以下错误消息:
Inconsistent set of values to create NSBitmapImageRep
我有以下代码片段:
NSBitmapImageRep *rep = [[NSBitmapImageRep alloc]
initWithBitmapDataPlanes : nil
pixelsWide : width
pixelsHigh : height
bitsPerSample : bitsStored
samplesPerPixel : 1
hasAlpha : NO
isPlanar : NO
colorSpaceName : NSCalibratedWhiteColorSpace
bytesPerRow : width * bitsAllocated / 8
bitsPerPixel : bitsAllocated];
使用这些值:
width = 256
height = 256
bitsStored = 12
bitsAllocated = 16
对我来说似乎没有什么不一致的。我已经验证了图像的长度是:宽*高*2。所以我很确定它是 2 字节灰度格式。我尝试了许多参数的变体,但没有任何效果。如果我将“bitsPerSample”更改为 16,错误消息就会消失,但我会得到一个纯黑色图像。我能够取得的最接近的成功是将“bitsPerPixel”设置为零。当我这样做时,我成功地生成了一个图像,但它显然被错误地渲染了(你几乎无法辨认出原始图像)。请给点建议!!我已经尝试了很长时间才能使其正常工作,并检查了堆栈溢出和网络(很多次)。非常感谢您的帮助!
解决方案:
在 LEADTOOLS Support 提供了非常有用的建议之后,我能够解决我的问题。这是有效的代码片段(假设是 MONOCHROME2 DICOM 图像):
// If, and only if, MONOCHROME2:
NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc]
initWithBitmapDataPlanes : &pixelData
pixelsWide : width
pixelsHigh : height
bitsPerSample : bitsAllocated /*bitsStored-this will not work*/
samplesPerPixel : samplesPerPixel
hasAlpha : NO
isPlanar : NO
colorSpaceName : NSCalibratedWhiteColorSpace
bytesPerRow : width * bitsAllocated / 8
bitsPerPixel : bitsAllocated];
int scale = USHRT_MAX / largestImagePixelValue;
uint16_t *ptr = (uint16_t *)imageRep.bitmapData;
for (int i = 0; i < width * height; i++) *ptr++ *= scale;