UIColor에서 rgb 추출 [중복]
이 질문에 이미 답변이 있습니다.
이것이 전에 요청되었지만 내 예제가 작동하지 않는 것 같습니다.
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];
iOS 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];
}
다음은 비 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];
}
memcpy를 사용하십시오.
CGColorRef tmpColor = [[currentColorView backgroundColor] CGColor];
CGFloat newComponents[4] = {};
memcpy(newComponents, CGColorGetComponents(tmpColor), sizeof(newComponents));
// now newComponents is filled with tmpColor rgba data
윌 스터의 지시에 감사드립니다. 그레이 스케일 색상 (로 생성됨 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];
}
}
이 기사는 제가이 문제를 해결하거나 적어도 문제를 해결할 프레임 워크를 구축하는 데 도움이되었습니다.
http://developer.apple.com/iphone/library/qa/qa2007/qa1509.html
Here's some more direct sample code for getting RGB components from a arbitrary color:
Get RGB value from UIColor presets
Checkout uicolor-utilities. Seems like a very good library for doing this and many other useful things with UIColor. For example, with this library you could write:
CGFloat red = [myColor red];
참고URL : https://stackoverflow.com/questions/816828/extracting-rgb-from-uicolor
'program story' 카테고리의 다른 글
.NET에서 이중 체크 잠금에서 휘발성 수정 자 필요 (0) | 2020.10.08 |
---|---|
직접 실행 창에서 데이터 테이블 또는 데이터보기의 내용을 쉽게 볼 수있는 방법 (0) | 2020.10.07 |
파일이 bash에 있는지 테스트하는 While 루프 (0) | 2020.10.07 |
Google Maps Api v3-getBounds가 정의되지 않았습니다. (0) | 2020.10.07 |
읽기 전용 필드에 대해 불순한 메소드가 호출 됨 (0) | 2020.10.07 |