so solo di un modo corretto di fare questo - e quello è chiamare CGGetColorComponents()
. Ho provato a utilizzare UIColor
di -getRed:green:blue:alpha
, ma non funziona correttamente sui colori della scala di grigi. Quindi ecco cosa faccio:
In primo luogo, ho un semplice struct
che mi consente di manipolare facilmente i colori RGBA. Questa struttura è utile altrove per fare ogni sorta di manipolazione del colore, come la correzione della gamma e la media del colore.
typedef struct
{
CGFloat r; // Red component (0 <= r <= 1)
CGFloat g; // Green component (0 <= g <= 1)
CGFloat b; // Blue component (0 <= b <= 1)
CGFloat a; // Alpha/opacity component (0 <= a <= 1)
}
RGBA;
Poi, ho una funzione che restituisce un RGBA
struttura data una UIColor
.
RGBA RGBAFromUIColor(UIColor *color)
{
return RGBAFromCGColor(color.CGColor);
}
passa s' CGColor
ad una funzione di livello inferiore la UIColor
per fare il sollevamento di carichi pesanti.
RGBA RGBAFromCGColor(CGColorRef color)
{
RGBA rgba;
CGColorSpaceRef color_space = CGColorGetColorSpace(color);
CGColorSpaceModel color_space_model = CGColorSpaceGetModel(color_space);
const CGFloat *color_components = CGColorGetComponents(color);
int color_component_count = CGColorGetNumberOfComponents(color);
switch (color_space_model)
{
case kCGColorSpaceModelMonochrome:
{
assert(color_component_count == 2);
rgba = (RGBA)
{
.r = color_components[0],
.g = color_components[0],
.b = color_components[0],
.a = color_components[1]
};
break;
}
case kCGColorSpaceModelRGB:
{
assert(color_component_count == 4);
rgba = (RGBA)
{
.r = color_components[0],
.g = color_components[1],
.b = color_components[2],
.a = color_components[3]
};
break;
}
default:
{
NSLog(@"Unsupported color space model %i", color_space_model);
rgba = (RGBA) { 0, 0, 0, 0 };
break;
}
}
return rgba;
}
Quindi, questo funziona alla grande per i colori in scala di grigi (come UIColor.whiteColor
, UIColor.blackColor
, UIColor.grayColor
, ecc) così come qualsiasi verde blu/rosso// alpha. Tuttavia, non funzionerà con i colori HSB.
fonte
2013-05-19 09:14:56
Grazie. Ho deciso che il mio problema non vale la soluzione, e sono passato a [UIColor colotWithRGB], ho ottenuto i valori RBG da http://foobarpig.com/iphone/uicolor-cheatsheet-color-list-conversion-from-and -to-rgb-values.html. – lstipakov
Grazie. Il mio problema vale esattamente questa soluzione! –
Nota: in iOS 5, 'UIColor' è' -getRed: green: blue: alpha' funziona solo per i colori che utilizzano lo spazio cromatico RGB. È rotto per i colori in scala di grigi. Hanno risolto questo problema in iOS 6? –