0

我正在尝试创建一个 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 会破坏图片的质量。毕竟,它是一个 3,7 MB 32bpc TIFF,带有一个 Alpha 通道。

4

1 回答 1

1

您正在尝试分配超出文档中指定范围的 32 bitsPerSample:

基点

用于在数据的单个组件中指定一个像素的位数。假定所有组件的每个样本具有相同的位。bps 应该是以下值之一:1、2、4、8、12 或 16。

NSBitmapImageRep 类参考

于 2014-12-31T05:50:35.947 回答