temperas sangre rojo roja que plastilina pintura para oscuro mezclando mezclan hago hacer hace con como colores color objective-c iphone cocoa-touch rgb uicolor

objective-c - sangre - como se hace el color rojo mezclando colores



¿Cómo obtengo rojo verde azul(RGB) y alfa de un objeto UIColor? (9)

Estoy obteniendo un UIColor devuelto de este método:

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

y obteniendo un color como este:

UIColor *selectedColor = [(ColorPickerView *)alertView getUserSelectedColor];

Ahora quiero obtener rojo, verde, azul de selectedColor, para usar esos valores. Quiero valores entre 0 y 1.


Aquí hay algunas macros útiles que he hecho para este y otros controles de color:

En tu caso solo usarías

getRGBA(myColor, red, green, blue, alpha); NSLog(@"Red Value: %f", red); NSLog(@"Blue Value: %f", green); NSLog(@"Green Value: %f", blue);

Macros

#define rgba(r,g,b,a) [UIColor colorWithRed:((float)(r))/255.0f green:((float)(g))/255.0f blue:((float)(b))/255.0f alpha:a] #define rgb(r,g,b) rgba(r, g, b, 1.0f) #define rgbaf(r,g,b,a) [UIColor colorWithRed:(r) green:(g) blue:(b) alpha:a] #define rgbf(r,g,b) rgbaf(r, g, b, 1.0f) #define rgba_fromColor(__color, __r, __g, __b, __a) / CGFloat __r, __g, __b, __a;/ UIColor *__unpackedColor = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:__color]];/*Bring system colors into compatible color-space (e.g. DarkGrayColor)*// [__unpackedColor getRed:&__r green:&__g blue:&__b alpha:&__a]; #define getRGBA(__color, __r, __g, __b, __a) rgba_fromColor(__color, __r, __g, __b, __a) #define getRed(__color) (/ (^float (void){/ rgba_fromColor(__color, r, g, b, a);/ return r;/ })()/ ) #define getGreen(__color) (/ (^float (void){/ rgba_fromColor(__color, r, g, b, a);/ return g;/ })()/ ) #define getBlue(__color) (/ (^float (void){/ rgba_fromColor(__color, r, g, b, a);/ return b;/ })()/ ) #define getAlpha(__color) (/ (^float (void){/ rgba_fromColor(__color, r, g, b, a);/ return a;/ })()/ ) #define hsba(h,s,b,a) [UIColor colorWithHue:((float)(h))/360.0f saturation:((float)(s))/100.0f brightness:((float)(b))/100.0f alpha:a] #define hsb(h,s,b) hsba(h, s, b, 1.0f) #define hsbaf(h,s,b,a) [UIColor colorWithHue:(h) saturation:(s) brightness:(b) alpha:a] #define hsbf(h,s,b) rgbaf(h, s, b, 1.0f) #define hsba_fromColor(__color, __h, __s, __b, __a) / CGFloat __h, __s, __b, __a;/ UIColor *__unpackedColor = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:__color]];/*Bring system colors into compatible color-space (e.g. DarkGrayColor)*// [__unpackedColor getHue:&__h saturation:&__s brightness:&__b alpha:&__a]; #define getHSBA(__color, __h, __s, __b, __a) hsba_fromColor(__color, __h, __s, __b, __a) #define getHue(__color) (/ (^float (void){/ hsba_fromColor(__color, h, s, b, a);/ return h;/ })()/ ) #define getSaturation(__color) (/ (^float (void){/ hsba_fromColor(__color, h, s, b, a);/ return s;/ })()/ ) #define getBrightness(__color) (/ (^float (void){/ hsba_fromColor(__color, h, s, b, a);/ return b;/ })()/ ) /* ///already defined in RGBA macros #define getAlpha(__color) (/ (^float (void){/ hsba_fromColor(__color, h, s, b, a);/ return a;/ })()/ ) */


Creo que deberías echar un vistazo aquí , donde la guía de Ars muestra cómo extender la clase UIColor con soporte para acceder a los componentes de color.


Creo que esta sería una manera de ir. Si también necesita utilizar el parámetro alfa, puede interpolar alfa desde la entrada como lo hace para RG y 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]; }


El motivo del bloqueo al acceder a SelectedColor.CGColor podría ser que no retiene el resultado de getColor , tal vez lo que necesita es:

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

Solo puede obtener el componente de color RGB de un UIColor que usa el espacio de color RGB, ya que está usando colorWithRed:green:blue:alpha: eso no es un problema, pero puede variar si su código cambia.

Con esto es muy fácil conseguir los componentes de color:

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


En la mayoría de los casos, esto funcionará, a menos que la conversión a RGB no funcione.

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

Para eso son estos métodos, de hecho. Sin embargo, si la conversionToRGBWentOk es NO , tendrá un problema.


Esta solución funciona también para colores no RGB, por ejemplo, en color negro o blanco.

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


Este fragmento de código debería funcionar con RGB y en escala de grises:

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


Solo agregue la propiedad ColorLiteral como se muestra en el ejemplo. Xcode le indicará una lista completa de colores que puede elegir.

self.view.backgroundColor = ColorLiteral


simplemente haces esto

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

en rojo, verde, azul y alfa obtienes el valor rgb si tienes alguna pregunta, por favor pregunta ...

Gracias