3

我有一个用 xcode 6.1 创建的 osx xcode 项目,我想用它来训练一下使用 SWIFT。

在我的一个观点中,我尝试创建一个 NSBitMapImageRep,如下所示:

class BitmapView : NSView {
var image: NSBitmapImageRep!

override func awakeFromNib() {
    var blub = NSBitmapImageRep(bitmapDataPlanes: nil,
        pixelsWide: Int(self.frame.size.width),
        pixelsHigh: Int(self.frame.size.height),
        bitsPerSample: 8,
        samplesPerPixel: 1,
        hasAlpha: false,
        isPlanar: false,
        colorSpaceName: NSCalibratedRGBColorSpace,
        bytesPerRow: 0, bitsPerPixel: 0)!

    //test()
}}

但是每次我尝试运行它时,都会出现以下错误:

Inconsistent set of values to create NSBitmapImageRep fatal error: unexpectedly found nil while unwrapping an Optional value

我猜这是由于 bitmapDataPlanes 为零。但它是一个可选值,根据文档允许为 NULL。传递 NSNull() 反而不会编译。

谁能告诉我我必须通过什么?o_O

4

1 回答 1

7

该错误实际上是相当具有描述性的——您为初始化程序提供了一组不一致的值。具体来说,samplesPerPixel值 1 不支持您在 中指定的 RGB 颜色空间colorSpaceName从这里

samplesPerPixel:数据分量的数量,或每个像素的样本数。此值包括颜色分量和覆盖分量 (alpha)(如果存在)。有意义的值范围从 1 到 5。具有青色、品红色、黄色和黑色 (CMYK) 颜色分量加上覆盖分量的图像的 spp 为 5;缺少覆盖组件的灰度图像的 spp 为 1。

因此,您只需将每像素的样本数更改为 3:

var blub = NSBitmapImageRep(bitmapDataPlanes: nil,
    pixelsWide: Int(100),
    pixelsHigh: Int(100),
    bitsPerSample: 8,
    samplesPerPixel: 3,
    hasAlpha: false,
    isPlanar: false,
    colorSpaceName: NSCalibratedRGBColorSpace,
    bytesPerRow: 0, bitsPerPixel: 0)!
于 2014-11-17T19:32:02.877 回答