2013-12-10 7 views
1

이 매크로는 on an Internet page입니다. 그것이 무엇을하는지에 대한 설명이 없습니다.누군가이 매크로를 설명 할 수 있습니까?

#define UIColorFromRGB(__HEX__, __A__) [UIColor \ 
     colorWithRed:((float)((__HEX__ & 0xFF0000) >> 16))/255.0 \ 
     green:((float)((__HEX__ & 0xFF00) >> 8))/255.0 \ 
     blue:((float)(__HEX__ & 0xFF))/255.0 alpha:__HEX__] 

이 나는 ​​형태 0xRRGGBB에 16 진수를 소요하고 여기에서 RR, GGBB 부분을 추출한다고 가정하지만, 정확히 어떻게이 이루어집니다?

또는 가장 구체적으로 말하자면, (__HEX__ & 0xFF0000) >> 16)은 숫자의 첫 번째 부분을 어떻게 추출합니까? 미안하지만 나는 이걸 이해하지 못했다. C.

끝에 alpha:__HEX__을 쓰면 작성자가 잘못 되었습니까? alpha:__A__일까요?

감사합니다.

+5

예, 저자의 마지막 부분에 문제가있는 것 같습니다. 그렇지만'(someNumber & 0xF0000) >> 16 '과 같은 것들은 모든 프로그래머가 이해해야 만하는 기본적인 비트 지향 Boolean 로직입니다. 부울 표현식에 대한 자습서를 찾아 연구하십시오. –

답변

3

색상에 대해서는 0xAABBCC 값을 사용하십시오.

__HEX__ & 0xFF0000 수율 0xAA0000. 0xAA0000 >> 160xAA을 산출한다. 0xAA/255.00.6667을 산출한다. +colorWithRed:green:blue:alpha:이 (가) 찾고있는 값 범위 내에 있습니다.

__HEX__ & 0xFF000xBB00이다. 0xBB00 >> 80xBB을 산출한다. 0xBB/255.00.7333을 산출한다. +colorWithRed:green:blue:alpha:이 (가) 찾고있는 값 범위 내에 있습니다.

__HEX__ & 0xFF 수율 0xCC. 0xCC/255.00.8을 산출한다. +colorWithRed:green:blue:alpha:이 (가) 찾고있는 값 범위 내에 있습니다.

당신은 맞습니다. 틀렸어. 일을 간단하게하기 위해, 난 그냥 원시 예상 사용 UIColorFromRGB(0xAABBCC, 0.6) 같은 것 값

#define UIColorFromRGB(__HEX__, __A__) [UIColor \ 
    colorWithRed:((CGFloat)(((__HEX__) & 0xFF0000) >> 16))/255.0 \ 
    green:((CGFloat)(((__HEX__) & 0xFF00) >> 8))/255.0 \ 
    blue:((CGFloat)((__HEX__) & 0xFF))/255.0 alpha:(CGFloat)(__A__)] 

을 사용,이 알파는 0xAABBCC 색상 60 %는 불투명 할 것입니다.


참고

난 항상 괄호 안에 매크로 인수를 마무리. 이는 특정 유형의 구문 또는 논리 오류를 방지합니다.

+colorWithRed:green:blue:alpha:CGFloat이 아니며 float입니다.


UPDATE

자세한 설명은 약 비트 이동을 요청했다. 그래서 여기에 간다.

0x32241608

0x1600는 16 비트 값이며, 0x08는 8 비트 수이다 0x240000는 24이지만 번호이며, I는 그것이 0x32000000 표시하는 내장 된 번호가 32 비트 수이다.

0x32241608 >> 8 수율 0x322416. 숫자의 8 비트 부분을 잘라내는 것으로 생각할 수 있습니다.

0x32241608 >> 16 수율 0x3224. 숫자의 16 비트 부분을 잘라내는 것으로 생각할 수 있습니다.

0x32241608 >> 24 수율 0x32. 번호의 24 비트 부분을 잘라내는 것으로 생각할 수 있습니다.

0x32241608 >> 32 수율 0x0. 번호의 32 비트 부분을 잘라내어 전체 숫자를 잘라내는 것으로 생각할 수 있습니다.

설명으로 돌아 가기. 빨간색 값을 얻으려면 녹색 및 파란색 값의 16 비트를 잘라야합니다. 녹색 값을 얻으려면 파란색 값의 8 비트를 잘라야합니다.

이렇게하면 비트 이동이 해제되기를 바랍니다.

+0

-1 이것은 무엇을하는지 설명하지만 왜 또는 어떻게 설명하지는 않습니다. – JustSid

+0

P E R F E C T! ! ! 내가 "아"라고 깨닫지 못한 것은 AABBCC가 16 비트 숫자라는 것입니다. 왜냐하면 어떤 이유로 내 뇌가 그것을 보지 못했기 때문입니다. 이제 저자가 첫 번째 블록에서 16 비트 오른쪽으로 이동 한 이유를 알 수 있습니다. 감사!!!!! – SpaceDog

+0

@DesperateDeveloper AABBCC는 24 비트 숫자입니다. BBCC는 16 비트입니다. – JustSid

관련 문제