Технические вопросы и ответы QA1576

Как я получаю шестнадцатеричное значение объекта NSColor?

Q: Как я получаю шестнадцатеричное значение объекта NSColor?

A: Как я получаю шестнадцатеричное значение объекта NSColor?

Ниже шаги, требуемые получить шестнадцатеричное значение объекта NSColor.

  1. Преобразуйте цветовой объект в цветовое пространство RGB.

    Этот шаг важен для него, недопустимо для доступа к компонентам NSColor, не определяющимся для его цветового пространства. Используйте colorUsingColorSpaceName метод для преобразования цвета в цветовое пространство RGB.

  2. Получите красные, зеленые, и синие компоненты цвета.

    Эти компоненты являются значениями с плавающей точкой на домене [0, 1] с минимальной интенсивностью, являющейся 0 и максимальной интенсивностью, являющейся 1. Используйте getRed:(CGFloat *)red green:(CGFloat *)green blue:(CGFloat *)blue alpha:(CGFloat *)alpha метод для получения красного цвета, зеленые, и синие компоненты.

  3. Преобразуйте компоненты в веб-цветовое пространство, состоящее из чисел (десятичное целое число без знака) между 0 и 255.

    Цель здесь состоит в том, чтобы произвести три двухразрядных шестнадцатеричных компонента цвета со значениями, колеблющимися от 0x00 (0 десятичных чисел, минимальная интенсивность) через 0xFF (255 десятичных чисел, максимальная интенсивность).

  4. Преобразуйте каждое число в двухразрядную шестнадцатеричную строку.

  5. Свяжите шестнадцатеричные строки красных, зеленых, и синих компонентов вместе с «#».

Перечисление 1 показывает, как программно реализовать эти шаги; это создает Objective C category это добавляет hexadecimalValueOfAnNSColor метод к классу NSColor.

Перечисление 1  , Добавляющее категорию к NSColor.

#import <Cocoa/Cocoa.h>
@interface NSColor(NSColorHexadecimalValue) 
-(NSString *)hexadecimalValueOfAnNSColor;
@end

@implementation NSColor(NSColorHexadecimalValue)

-(NSString *)hexadecimalValueOfAnNSColor
{
    float redFloatValue, greenFloatValue, blueFloatValue;
    int redIntValue, greenIntValue, blueIntValue;
    NSString *redHexValue, *greenHexValue, *blueHexValue;

  //Convert the NSColor to the RGB color space before we can access its components
    NSColor *convertedColor=[self colorUsingColorSpaceName:NSCalibratedRGBColorSpace];

    if(convertedColor)
    {
        // Get the red, green, and blue components of the color
        [convertedColor getRed:&redFloatValue green:&greenFloatValue blue:&blueFloatValue alpha:NULL];

        // Convert the components to numbers (unsigned decimal integer) between 0 and 255
        redIntValue=redFloatValue*255.99999f;
        greenIntValue=greenFloatValue*255.99999f;
        blueIntValue=blueFloatValue*255.99999f;

        // Convert the numbers to hex strings
        redHexValue=[NSString stringWithFormat:@"%02x", redIntValue]; 
        greenHexValue=[NSString stringWithFormat:@"%02x", greenIntValue];
        blueHexValue=[NSString stringWithFormat:@"%02x", blueIntValue];

        // Concatenate the red, green, and blue components' hex strings together with a "#"
        return [NSString stringWithFormat:@"#%@%@%@", redHexValue, greenHexValue, blueHexValue];
    }
    return nil;
}
@end

Перечисление 2  , Получающее шестнадцатеричное значение объекта NSColor.

//aColor is an NSColor object  NSString *hexValue=[aColor hexadecimalValueOfAnNSColor];

Дополнительные материалы для чтения



История версии документа


ДатаПримечания
19.12.2007

Новый документ, описывающий, как преобразовать объект NSColor в его Шестнадцатеричное значение.