无法在Swift中创建NSBitmapImageRep

Inf*_*ite 2 macos xcode nsbitmapimagerep swift

我有一个用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()
}}
Run Code Online (Sandbox Code Playgroud)

但每次我尝试运行它时,我都会收到以下错误:

Inconsistent set of values to create NSBitmapImageRep fatal error: unexpectedly found nil while unwrapping an Optional value
Run Code Online (Sandbox Code Playgroud)

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

任何人都可以告诉我我必须通过什么?O_O

Nat*_*ook 6

该错误实际上是相当描述性的 - 您为初始化程序提供了一组不一致的值.具体来说,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)!
Run Code Online (Sandbox Code Playgroud)

  • 虽然你的答案是正确的,但我没有发现错误非常具有描述性......详细的错误描述了"在展开一个可选值时意外发现了nil",这使得它看起来像错误在某个地方完全不同...主要在bitmapDataPlanes中... (3认同)