2012-12-15 2 views
2

나는 UIColor을 수신하고 RGBA 값을 사용해야하는 기능이 있습니다. 내가 지금까지 한 것은 CGColorGetComponents을 사용했지만 다른 색 공간 (예 : 회색 음영 인 [UIColor blackColor])에서는 잘 작동하지 않습니다. getRed 녹색 파랑 (iOS 5)을 사용하면 [UIColor blackColor] (false를 반환)에서도 작동하지 않습니다.iOS에서 RGB로 색상 변환

쉬운 방법이 있나요?

답변

2

대부분의 경우 다음과 같은 방법이 효과적입니다 (패턴 색상 제외). UIColor에 범주로 추가하십시오.

- (void)getRGBA:(CGFloat*)buffer { 
     CGColorRef clr = [self CGColor]; 
     NSInteger n = CGColorGetNumberOfComponents(clr); 
     const CGFloat *colors = CGColorGetComponents(clr); 
     switch (n) { 
     case 2: 
      for(int i = 0; i<3; ++i){ 
       buffer[i] = colors[0]; 
      } 
      buffer[3] = CGColorGetAlpha(clr); 
      break; 
     case 3: 
      for(int i = 0; i<3; ++i){ 
       buffer[i] = colors[i]; 
      } 
      buffer[3] = 1.0; 
      break; 
     case 4: 
      for(int i = 0; i<4; ++i){ 
       buffer[i] = colors[i]; 
      } 
      break; 
     default: 
      break; 
     } 
} 
0

getRed:... 색상이 RGB 색상 공간에없는 경우 false를 반환합니다. 거의 유일한 다른 옵션은 회색 음영 색 공간이므로 getWhite:alpha:을 시도하면 올바른 값을 다시 얻어야합니다. 그러면이 색상의 RGBA에 해당하는 R, G 및 B 값 각각에 흰색 값이 적용됩니다.

+0

CMYK 색상 공간이 있지만 아마도 Yaniv는 자신의 앱에서이 색상을 사용하고 있는지 여부를 알고있을 것입니다. –

+0

@robmayoff - CMYK NSColor가 아니고 UIColor가 지원하지 않습니다. – jrturton

+0

하하 나는 더 조심스럽게 조사해야한다. 저는 실제로 OS X 만인'CGColorCreateGenericCMYK'를보고있었습니다. –