【问题标题】:Getting a hex value from NSColor in Cocoa?从 Cocoa 中的 NSColor 获取十六进制值?
【发布时间】:2019-02-05 13:36:19
【问题描述】:

有谁知道是否可以从 Cocoa 中的 NSColor 获取颜色的十六进制值?

【问题讨论】:

    标签: objective-c macos cocoa nscolor


    【解决方案1】:

    使用蓝色 NSColor 的示例:

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

    【讨论】:

    【解决方案2】:

    我喜欢 D.A.H 的解决方案,我将其设为计算属性而不是函数:

    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
        }
    
    }
    

    【讨论】:

      【解决方案3】:

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

      import Cocoa
      
      extension NSColor {
      
          var hexString: String {
              guard let rgbColor = usingColorSpaceName(NSColorSpaceName.calibratedRGB) 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
          }
      }
      

      【讨论】:

      • 色彩空间校正修改了颜色(在我的机器上朝向黑色),产生了一个稍微错误的十六进制字符串
      • 色彩空间应该是sRGB,因为它用于Web Colors
      • @Oskar: usingColorSpaceName 已被弃用,在新版本中可以做什么?
      【解决方案4】:

      一个选项是为 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
          }
      }
      

      【讨论】:

        【解决方案5】:

        为 Swift 4 更新

        extension NSColor {
        
            var hexString: String {
                guard let rgbColor = usingColorSpaceName(NSColorSpaceName.calibratedRGB) 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
            }
        
        }
        

        【讨论】:

        • usingColorSpaceName 已弃用,在新版本中可以做什么?
        • @Paul 我想是usingColorSpace(NSColorSpace. ...)
        猜你喜欢
        • 2015-08-01
        • 2014-02-18
        • 1970-01-01
        • 1970-01-01
        • 2015-02-10
        • 1970-01-01
        • 2011-07-12
        • 2020-02-12
        • 2021-01-03
        相关资源
        最近更新 更多