2013-04-08 82 views

回答

7

实施例使用蓝色NSColor:

NSColor* color = [NSColor blueColor]; 

NSString* hexString = [NSString stringWithFormat:@"%02X%02X%02X", 
(int) (color.redComponent * 0xFF), (int) (color.greenComponent * 0xFF), 
(int) (color.blueComponent * 0xFF)]; 
+7

小心!在所有'NSColor'实例上调用'-redComponent'等并不总是合法的。他们可能会抛出异常。您必须转换为RGB色彩空间并应对失败。您应该看到[技术问答QA1576:如何获取NSColor对象的十六进制值?](http://developer.apple.com/library/mac/#qa/qa1576/_index.html)。 – 2013-04-08 21:23:49

1

一个选择是创建一个扩展NSColor

public extension NSColor { 
    func getHexString() -> String { 
     let red = Int(round(self.redComponent * 0xFF)) 
     let grn = Int(round(self.greenComponent * 0xFF)) 
     let blu = Int(round(self.blueComponent * 0xFF)) 
     let hexString = NSString(format: "#%02X%02X%02X", red, grn, blu) 
     return hexString 
    } 
} 
1

我喜欢DAH的解决方案,我使其成为计算的属性,而不是一个功能:

import Cocoa 

extension NSColor { 

    var hexString: String { 
     let red = Int(round(self.redComponent * 0xFF)) 
     let green = Int(round(self.greenComponent * 0xFF)) 
     let blue = Int(round(self.blueComponent * 0xFF)) 
     let hexString = NSString(format: "#%02X%02X%02X", red, green, blue) 
     return hexString as String 
    } 

} 
1

由于色彩空间问题而不会崩溃的解决方案:

import Cocoa 

extension NSColor { 

    var hexString: String { 
     guard let rgbColor = usingColorSpaceName(NSCalibratedRGBColorSpace) else { 
      return "FFFFFF" 
     } 
     let red = Int(round(rgbColor.redComponent * 0xFF)) 
     let green = Int(round(rgbColor.greenComponent * 0xFF)) 
     let blue = Int(round(rgbColor.blueComponent * 0xFF)) 
     let hexString = NSString(format: "#%02X%02X%02X", red, green, blue) 
     return hexString as String 
    } 

} 
+0

颜色空间修正修改颜色(朝向我的机器上的黑色),产生稍微错误的十六进制字符串 – 2017-05-24 09:28:55