Видел это раньше, но мой пример, похоже, не работает.Извлечение rgb из UIColor
const CGFloat *toCol = CGColorGetComponents([[UIColor greenColor] CGColor]);
Массив пуст, глядя на него с помощью GDB. Любые намеки?
Видел это раньше, но мой пример, похоже, не работает.Извлечение rgb из UIColor
const CGFloat *toCol = CGColorGetComponents([[UIColor greenColor] CGColor]);
Массив пуст, глядя на него с помощью GDB. Любые намеки?
Образец кода, который вы предоставили, должен работать.
Попробуйте это:
UIColor uicolor = [[UIColor greenColor] retain];
CGColorRef color = [uicolor CGColor];
int numComponents = CGColorGetNumberOfComponents(color);
if (numComponents == 4)
{
const CGFloat *components = CGColorGetComponents(color);
CGFloat red = components[0];
CGFloat green = components[1];
CGFloat blue = components[2];
CGFloat alpha = components[3];
}
[uicolor release];
Эта статья помогла мне решить эту проблему или, по крайней мере, создать основу для ее решения.
http://developer.apple.com/iphone/library/qa/qa2007/qa1509.html
Вот некоторые более прямой пример кода для получения компонентов RGB от произвольного цвета:
uicolor-utilities заказ. Кажется, очень хорошая библиотека для этого и много других полезных вещей с UIColor. Например, с помощью этой библиотеки вы можете написать:
CGFloat red = [myColor red];
Просто используйте тетср:
CGColorRef tmpColor = [[currentColorView backgroundColor] CGColor];
CGFloat newComponents[4] = {};
memcpy(newComponents, CGColorGetComponents(tmpColor), sizeof(newComponents));
// now newComponents is filled with tmpColor rgba data
В прошивке 5 вы можете использовать:
UIColor *color = [UIColor orangeColor];
CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha = 0.0;
if ([color respondsToSelector:@selector(getRed:green:blue:alpha:)]) {
[color getRed:&red green:&green blue:&blue alpha:&alpha];
} else {
const CGFloat *components = CGColorGetComponents(color.CGColor);
red = components[0];
green = components[1];
blue = components[2];
alpha = components[3];
}
В MonoTouch (Xamarin): 'color.GetRGBA (из красного, зеленого, синего, альфа);' –
Вот все круглое решение, которое также принимает с учетом цветов, отличных от RGB, например [UIColor blackColor]
UIColor *color = [UIColor blackColor];
CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha = 0.0;
// iOS 5
if ([color respondsToSelector:@selector(getRed:green:blue:alpha:)]) {
[color getRed:&red green:&green blue:&blue alpha:&alpha];
} else {
// < iOS 5
const CGFloat *components = CGColorGetComponents(color.CGColor);
red = components[0];
green = components[1];
blue = components[2];
alpha = components[3];
}
// This is a non-RGB color
if(CGColorGetNumberOfComponents(color.CGColor) == 2) {
CGFloat hue;
CGFloat saturation;
CGFloat brightness;
[color getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
}
Спасибо, что указал на это направление. Для любого, кто использует цвет в оттенках серого (созданный с помощью colorWithWhite:alpha:
), приведенный ниже пример кода позволит вам определить белое значение (метод HSV не работает с созданными таким образом цветами).
CGFloat red = 0.0, green = 0.0, blue = 0.0, alpha = 0.0, white = 0.0;
// This is a non-RGB color
if(CGColorGetNumberOfComponents(self.color.CGColor) == 2) {
[self.color getWhite:&white alpha:&alpha];
}
else {
// iOS 5
if ([self.color respondsToSelector:@selector(getRed:green:blue:alpha:)]) {
[self.color getRed:&red green:&green blue:&blue alpha:&alpha];
} else {
// < iOS 5
const CGFloat *components = CGColorGetComponents(self.color.CGColor);
red = components[0];
green = components[1];
blue = components[2];
alpha = components[3];
}
}
ОК попробует это в одно мгновение, спасибо – 2009-05-03 12:47:15
Почему «сохранить» здесь необходимо? Кроме того, я могу получить только 2 (не 4) компонента. – Susanna
FYI, Susanna, оттенки серого отображаются как только 2 компонента. – davidcann