Кто-нибудь знает, можно ли получить шестнадцатеричное значение цвета из NSColor в Cocoa?
Получение шестнадцатеричного значения из NSColor в Cocoa?
Ответы (5)
Пример использования синего цвета NSColor:
NSColor* color = [NSColor blueColor];
NSString* hexString = [NSString stringWithFormat:@"%02X%02X%02X",
(int) (color.redComponent * 0xFF), (int) (color.greenComponent * 0xFF),
(int) (color.blueComponent * 0xFF)];
person
SG1
schedule
08.04.2013
Будь осторожен! Не всегда допустимо вызывать
-redComponent
и т. д. для всех экземпляров NSColor
. Они могут выдать исключение. Вы должны преобразовать в цветовое пространство RGB и справиться с ошибкой. Вы должны увидеть Технические вопросы и ответы QA1576: как получить шестнадцатеричное значение объект NSColor?.
- person Ken Thomases; 09.04.2013
Это можно исправить с помощью метода
usingColorSpace(:)
- person juniorRubyist; 31.12.2018
Мне нравится решение 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
}
}
person
Tyler Long
schedule
02.09.2015
Решение, которое не дает сбоев из-за проблем с цветовым пространством:
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
}
}
person
Oskar
schedule
11.09.2016
Коррекция цветового пространства изменяет цвет (в сторону черного на моей машине), создавая немного неправильную шестнадцатеричную строку.
- person Alex; 24.05.2017
Цветовое пространство должно быть
sRGB
, поскольку оно используется для веб-цветов.
- person pointum; 26.02.2019
Вариант - создать расширение для 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
}
}
person
D.A.H
schedule
10.12.2014
Обновлено для 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
}
}
person
Duncan Groenewald
schedule
14.08.2018