我正在尝试将NSColor的实例保存到这样的文件中:

  writeF(node.lineColour.hueComponent)
  writeF(node.lineColour.saturationComponent)
  writeF(node.lineColour.brightnessComponent)
  writeF(node.lineColour.alphaComponent)


写功能在哪里:

  func writeF(var val: CGFloat) -> Bool {
    let nsd = NSData(bytes: &val, length: sizeof(CGFloat))
    let rv = oStream!.write(UnsafePointer(nsd.bytes), maxLength: sizeof(CGFloat))
    return rv > 0
  }


而且“ node.lineColour”只是NSColor.blueColor()。一切都可以编译,但是在第一行“ writeF”行给出了运行时消息:

2015-10-01 07:57:43.871 canl [77917:8371660]引发了未捕获的异常
2015-10-01 07:57:43.871 canl [77917:8371660] *** -hueComponent对NSColor NSCalibratedWhiteColorSpace 0 1无效;需要先转换色彩空间。

Apple关于色彩空间的文档非常深奥(如果您已经了解它,那将是一个很好的参考,但是如果不是,那么……祝您好运)。上面的代码为什么错误?应该至少能够检索颜色分量(CGFloat)。

最佳答案

浏览了可用的文档并尝试了不同的方法后,我发现此方法有效:

  let aColor = node.lineColor.colorUsingColorSpaceName(NSCalibratedRGBColorSpace)

  if let culoare = aColor {
    writeF(culoare.redComponent)
    writeF(culoare.greenComponent)
    writeF(culoare.blueComponent)
    writeF(culoare.alphaComponent)
  }


它还可以用于获取色相,饱和度和亮度分量,但是我想我会使用RGB。

关于cocoa - 将NSColor组件保存到文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32889659/

10-11 10:37