2009-09-30 15 views
49

sto ottenendo un UIColor restituito da questo metodo:Come ottengo rosso blu verde e alfa indietro da un oggetto UIColor?

- (UIColor *)getColor { 
return [UIColor colorWithRed:redSlider.value green:greenSlider.value blue:blueSlider.value alpha:1.0]; 
} 

e ottenere il colore in questo modo:

SelectedColor=[(ColorPickerView *)alertView getColor]; 

Ora voglio ottenere rosso, verde, blu da selectedColor, al fine di utilizzare quelli valori. Voglio valori compresi tra 0 e 1. Anche quando utilizzo SelectedColor.CGColor, la mia applicazione si arresta in modo anomalo.

+8

Una nota a margine; dovresti guardare le convenzioni di denominazione. 'getColor' è negativo per due motivi, in primo luogo utilizza il prefisso get che è un errore comune per gli sviluppatori Java, in secondo luogo non descrive il tipo di colore. Un nome migliore è probabilmente 'userSelectedColor'.Guarda come i getter del nome UIKit e le proprietà e segui l'esempio. – PeyloW

risposta

107

La ragione per l'incidente quando si accede SelectedColor.CGColor potrebbe essere che l'utente non conservi il risultato da getColor, forse quello che vi serve è:

SelectedColor = [[(ColorPickerView *)alertView getColor] retain]; 

si può ottenere solo la componente di colore RGB da un UIColor cioè utilizzando lo spazio colore RGB, dal momento che si sta usando colorWithRed:green:blue:alpha: che non è un problema, ma si può variare di questo se il codice cambia.

Con questo è la mente ottenere i componenti di colore è davvero semplice:

const CGFloat* components = CGColorGetComponents(SelectedColor.CGColor); 
NSLog(@"Red: %f", components[0]); 
NSLog(@"Green: %f", components[1]); 
NSLog(@"Blue: %f", components[2]); 
NSLog(@"Alpha: %f", CGColorGetAlpha(SelectedColor.CGColor)); 
+0

grazie PeyloW. Sai cos'è il mascheramento delle immagini in ihpone? –

+0

Come mascherare gli angoli arrotondati e così via? Certo, aggiungi una nuova domanda. – PeyloW

+0

Ciao PeyloW! Ho usato lo stesso ma sta dando le componenti di colore verde quando passo il colore nero. sai perché questo sta accadendo Puoi vedere il mio stesso post anche qui-> http://stackoverflow.com/questions/4155642/how-to-get-color-components-of-a-cgcolor-correctly – Ganesh

4

Penso che dovresti avere un a look here, dove la guida di Ars mostra come estendere la classe UIColor con il supporto per accedere ai componenti del colore.

1

questo frammento di codice dovrebbe funzionare sia con RGB e in scala di grigi:

CGFloat *components = (CGFloat *) CGColorGetComponents(<UIColor instance>.CGColor); 
if(CGColorGetNumberOfComponents(<UIColor instance>.CGColor) == 2) 
{ 
    //assuming it is grayscale - copy the first value 
    components[2] = components[1] = components[0]; 
} 
22

Questa soluzione funziona per i colori non RGB anche ad es colore bianco o nero.

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]; 

} 
+0

Il blocco di codice "non RGB" è anche solo iOS5 +. Potresti volerlo contrassegnare come tale. –

7

Nella maggior parte dei casi questo funzionerà, a meno che la conversione in RGB non funzioni.

float red, green, blue, alpha; 
BOOL conversionToRGBWentOk = [color getRed:&red green:&green blue:&blue alpha:&alpha]; 

Questo è ciò che questi metodi sono, infatti. Se lo conversionToRGBWentOk è NO avrai comunque un problema.

+1

Grazie, la tua è stata la soluzione migliore che abbia mai visto. –

+1

Ma causa un crash sul mio simulatore ios4.3. È compatibile con IOS5 +. –

2

basta semplici fare questo

CGFloat red,green,blue,alpha; 

[UIColorobject getRed:&red green:&green blue:&blue alpha:&alpha]; 

in rosso, verde, blu e alfa si ottiene valore RGB se avete qualsiasi domanda si prega di chiedere ...

Grazie

+0

Due persone hanno già pubblicato quel codice ... – nschum

0

Basta aggiungere la proprietà ColorLiteral come mostrato nell'esempio. Xcode ti richiederà un'intera lista di colori che puoi scegliere.

self.view.backgroundColor = ColorLiteral 
0

Penso che questa sarebbe una strada da percorrere. Se è necessario utilizzare anche il parametro alpha, è possibile interpolare alpha da input come per R G e B.

- (UIColor *)getColorBetweenColor:(UIColor *)color1 andColor:(UIColor *)color2 percentage:(CGFloat)percent { 
    CGFloat red1, green1, blue1, alpha1; 
    CGFloat red2, green2, blue2, alpha2; 

    [color1 getRed:&red1 green:&green1 blue:&blue1 alpha:&alpha1]; 
    [color2 getRed:&red2 green:&green2 blue:&blue2 alpha:&alpha2]; 

    double resultRed = red1 + percent * (red2 - red1); 
    double resultGreen = green1 + percent * (green2 - green1); 
    double resultBlue = blue1 + percent * (blue2 - blue1); 

    return [UIColor colorWithRed:resultRed green:resultGreen blue:resultBlue alpha:1]; 
} 
Problemi correlati