UIColor 객체에서 RGB (빨강 녹색 파랑)와 알파를 되 찾는 방법은 무엇입니까?
이 메서드에서 UIColor가 반환됩니다.
- (UIColor *)getUserSelectedColor {
return [UIColor colorWithRed:redSlider.value green:greenSlider.value blue:blueSlider.value alpha:1.0];
}
다음과 같은 색상을 얻습니다.
UIColor *selectedColor = [(ColorPickerView *)alertView getUserSelectedColor];
이제 해당 값을 사용하기 위해 selectedColor에서 빨강, 녹색, 파랑을 가져오고 싶습니다. 0과 1 사이의 값을 원합니다.
액세스 SelectedColor.CGColor
할 때 충돌의 원인은에서 결과를 유지하지 않았기 getColor
때문일 수 있습니다. 아마도 필요한 것은 다음과 같습니다.
SelectedColor = [[(ColorPickerView *)alertView getColor] retain];
UIColor
RGB 색상 공간을 사용하는 에서만 RGB 색상 구성 요소를 가져올 수 있습니다. 사용하고 있기 때문에 colorWithRed:green:blue:alpha:
문제가되지 않지만 코드가 변경되면이를 변경해야합니다.
이것으로 색상 구성 요소를 얻는 것은 정말 쉽습니다.
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));
이 솔루션은 RGB가 아닌 색상 (예 : 검정색 또는 흰색)에도 적용됩니다.
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];
}
대부분의 경우 RGB 로의 변환이 작동하지 않는 한 작동합니다.
float red, green, blue, alpha;
BOOL conversionToRGBWentOk = [color getRed:&red green:&green blue:&blue alpha:&alpha];
이것이 바로 이러한 방법의 목적입니다. 그래도 문제 conversionToRGBWentOk
가 NO
있습니다.
Ars의 가이드 에서 색상 구성 요소에 대한 액세스를 지원 하여 클래스 를 확장하는 방법을 보여주는 여기를 살펴보아야 한다고 생각합니다 UIColor
.
당신은이 일을 간단하게
CGFloat red,green,blue,alpha;
[UIColorobject getRed:&red green:&green blue:&blue alpha:&alpha];
빨강, 녹색, 파랑 및 알파로 질문이 있으시면 rgb 값을 얻으십시오.
감사
이 코드 조각은 RGB 및 회색조 모두에서 작동해야합니다.
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];
}
나는 이것이 갈 길이라고 생각합니다. alpha 매개 변수도 사용해야하는 경우 RG 및 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];
}
이를위한 Swift 확장이 있습니다. :)
extension UIColor {
var rgba: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) {
var red: CGFloat = 0.0
var green: CGFloat = 0.0
var blue: CGFloat = 0.0
var alpha: CGFloat = 0.0
getRed(&red, green: &green, blue: &blue, alpha: &alpha)
return (red: red, green: green, blue: blue, alpha: alpha)
}
var redComponent: CGFloat {
var red: CGFloat = 0.0
getRed(&red, green: nil, blue: nil, alpha: nil)
return red
}
var greenComponent: CGFloat {
var green: CGFloat = 0.0
getRed(&green, green: nil, blue: nil, alpha: nil)
return green
}
var blueComponent: CGFloat {
var blue: CGFloat = 0.0
getRed(nil, green: nil, blue: &blue, alpha: nil)
return blue
}
var alphaComponent: CGFloat {
var alpha: CGFloat = 0.0
getRed(nil, green: nil, blue: nil, alpha: &alpha)
return alpha
}
}
Swift 4.2와 호환되며 검은 색, 회색 등과 같은 두 가지 구성 요소 색상으로도 작동합니다. 다음과 같이 특정 운하에 액세스 할 수 있습니다.
myColor.rgba.blue
또는 그에 상응하는 것 :
myColor.blueComponent
Just add the property ColorLiteral
as shown in the example. Xcode will prompt you with a whole list of colors which you can choose.
self.view.backgroundColor = ColorLiteral
Here are some useful macros I've made for this and other color controls:
In your case you would just use
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;\
})()\
)
*/
ReferenceURL : https://stackoverflow.com/questions/1496716/how-do-i-get-red-green-blue-rgb-and-alpha-back-from-a-uicolor-object
'development' 카테고리의 다른 글
다른 색의 숫자 (0) | 2021.01.09 |
---|---|
어셈블리 (ASP.NET/C#)에서 웹 응용 프로그램 버전 번호 사용 (0) | 2021.01.09 |
대소 문자를 구분하지 않음 std :: string.find () (0) | 2021.01.09 |
detailTextLabel이 보이지 않는 이유는 무엇입니까? (0) | 2021.01.09 |
Rails의 URL에서 쿼리 문자열을 얻는 방법 (0) | 2021.01.09 |