我正在尝试创建一个NSBitmapImageRep对象,每个样本32位,一个alpha通道(每个像素128位)。
我的代码如下所示:
let renderSize = NSSize(width: 640, height: 360)
let bitmapRep = NSBitmapImageRep(bitmapDataPlanes: nil, pixelsWide: Int(renderSize.width), pixelsHigh: Int(renderSize.height), bitsPerSample: 32, samplesPerPixel: 4, hasAlpha: true, isPlanar: false, colorSpaceName: NSCalibratedRGBColorSpace, bytesPerRow: 16 * Int(renderSize.width), bitsPerPixel: 128)
println(bitmapRep) //prints "nil"
println(16 * Int(renderSize.width)) //prints 10240
println()
//So what does a 'valid' 32bpc TIFF file with an alpha channel look like?
let imgFile = NSImage(named: "32grad") //http://i.peterwunder.de/32grad.tif
let imgRep = imgFile?.representations[0] as NSBitmapImageRep
println(imgRep.bitsPerSample) //prints 32
println(imgRep.bitsPerPixel) //prints 128
println(imgRep.samplesPerPixel) //prints 4
println(imgRep.bytesPerRow) //prints 10240
println(imgRep.bytesPerRow / Int(imgFile!.size.width)) //prints 16
执行第2行后,它出现在控制台中:
2014-12-31 04:49:16.639 PixelTestBed [4413:2775703]创建NSBitmapImageRep的值不一致
这里发生了什么?为什么我不能使用与TIFF图像完全相同的值手动创建NSBitmapImageRep?
顺便说一句,我无法在此处上传图片,因为imgur会影响图像的质量。毕竟,这是一个带有alpha通道的3,7 MB 32bpc TIFF。
答案 0 :(得分:1)
您正在尝试分配32位PerSample,这超出了文档中指定的范围:
<强> bps的强>
用于指定单个组件中的一个像素的位数 数据。假设所有组件每个样本具有相同的位。 bps应该是以下值之一:1,2,4,8,12或16。