2013-02-28 1 views
11

3 가지 UIColors의 색조, 채도 및 밝기를 얻은 결과를 보여 드리겠습니다.[UIColor whiteColor]와 blackColor의 밝기가 같은 이유

[[UIColor redColor] getHue:&hue 
       saturation:&saturation 
       brightness:&brightness 
       alpha:&alpha]; 

hue = 1.0 saturatino = 1.0 brightness = 1.0 alpha = 0.0 

[[UIColor whiteColor] getHue:&hue 
        saturation:&saturation 
        brightness:&brightness 
         alpha:&alpha]; 

hue = 0.0 saturatino = 0.0 brightness = 0.0 alpha = 0.0 
흰색과 검은 색 색상의 색조, 채도, 밝기가 동일한 이유

[[UIColor blackColor] getHue:&hue 
        saturation:&saturation 
        brightness:&brightness 
         alpha:&alpha]; 

hue = 0.0 saturatino = 0.0 brightness = 0.0 alpha = 0.0 

사람이 설명 할 수 있습니까? 왜 알파는 0입니까? 내 프로젝트에하고 싶었던 무엇

은 밝기 변화에 의해 주어진 색상의 '어두운'색상을 생성 할 수 있습니다 :

밝기 = 밝기 * 0.8;

어떤 색상에도 문제가 없지만 흰색 색상은 검은 색입니다. (비록 나는 회색 색을 기대할 것이다).

+0

+1 멋진 캐치,이 시도하지 않았다. –

+0

'saturatino' 소리가났다. :) –

답변

12

이유는 +whiteColor+blackColor이 둘 다 HSB 색상 공간과 호환되지 않는 회색조 색상 공간에서 색상을 반환하기 때문입니다. 따라서 -getHue:saturation:brightness:alpha:은 실제로 매개 변수를 수정하지 않습니다. 그 방법을 호출하기 전에 모두 0.0으로 설정했음을 알게 될 것입니다. -getHue:saturation:brightness:alpha:의 반환 값을 확인하면 HSB로 변환되었는지를 알려줍니다.

+0

+1 놀라운 !!! 결코 이것을 생각하지 않았습니다. –

+0

감사! 그렇다면 그레이 스케일에 있더라도 UIColor에서 어두운 색상을 생성하는 보편적 인 방법이 있습니까? getHue : saturation : brightness : alpha : false를 반환 할 수 있습니까? – msmialko

+1

@ 모리 켄디 : 다른 색 공간도 HSB로 변환 할 수 없지만 iOS 프로그래밍에서 얼마나 많은 색상 공간을 사용할 수 있는지 알 수 없습니다. 최악의 경우, 자신의 데이터로 뒷받침되는 1px-1px CGBitmapContext를 생성하고 원본 색으로 채우고 다시 투명한 검은 색으로 채우고 컨텍스트를 삭제 한 다음 새 색의 픽셀 버퍼를 읽을 수 있습니다 . –

0

위의 Kevin Ballard는 문제의 원인에 대한 올바른 대답을 제공합니다. 나는 또한 색상의 알파를 동적으로 수정하고 싶다는 점을 제외하고는 작업중인 앱에서 비슷한 요구 사항을 가지고 있습니다. 그렇게하기 위해서 (UIColor + Modify) 카테고리를 만들었습니다 (아래 코드 참조). 구현에서는 RGB/HSB 공간에 색상이 없으면 흰색 음영을 찾고 있다고 가정합니다. 밝기를 "곱하기"위해이 기능을 쉽게 적용 할 수 있어야합니다. 내가 다른 색상의 밝기 및 알파 변경하려면

#import "UIColor+Modify.h" 

@implementation UIColor (Modify) 
-(UIColor*)setBrightness:(CGFloat)brightness alpha:(CGFloat)alpha { 
    CGFloat hue = 0.0F; 
    CGFloat saturation = 0.0F; 

    [self getHue:&hue saturation:&saturation brightness:nil alpha:nil]) 

    // if the above fails then hue and saturation will still be 0.0F 
    // according to Apple's documentation <1> 

    return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:alpha]; 
} 
@end 

그때이 방법을 사용 :

#import "UIColor+Modify.h" 
... 
UIColor brightColor = [UIColor redColor]; 
UIColor lessBrightSeeThroughColor = [someColor setBrightness:0.9F alpha 0.8F]; 
.... 

< 1>UIColor documentation