RGB를 Int32로 변환하기
Silverlight는 WPF중에서도 일부만 구현해 놓다보니, 예상치 못한 제약들이 곳곳에서 튀어나와서 심심하지 않게 해준다. -_-
아무튼. 오늘의 문제
- Int32형으로 저장된 RGB값을 Silverlight에서 읽어서 사용해야 한다.
- Silverlight는 System.Drawing.Color가 아닌, System.Windows.Media.Color를 사용한다.
- System.Windows.Media.Color.FromArgb메써드는 Int32를 인자로 받는 구현이 없다!! OTL..
결국, 한참 해맨끝에 RGB를 Int32로 만드는 꽁수를 밝혀냈다. (나 좀 짱인듯?ㅋㅋ-_-..)
- Alpha, Red, Green, Blue는 각각 8bit로 색상 정보를 표현한다. (0~255 = 8bit 범위)
- Int32는 당연하게도-_- 32bit이다.
- 32bit 메모리를 각각 8bit씩 4개 구역으로 나눠서 ARGB값을 넣으면, Int32 하나로 색상정보를 표현할 수 있다!
ㅇㅋㅂㄹ. 여기까지 오는데 한나절 걸렸다 ㅠㅠㅠㅠ 그러면 이제 각각의 bit block을 분리해주시면 되겠군요~
- public static Color IntToColor(int colorValue)
- {
- byte a = (colorValue >> 24) & 0xFF;
- byte r = (colorValue >> 16) & 0xFF;
- byte g = (colorValue >> 8) & 0xFF;
- byte b = (colorValue) & 0xFF;
- return Color.FromArgb(a, r, g, b);
- }
각각의 정보를 얻기위해 8bit씩을 시프트하고, 아래쪽 8bit만을 얻기 위해 0xFF(255)로 마스킹 해주면 된다.
이렇게 하면 16777215는 FromArgb(0, 255, 255, 255)의 투명색과 일치한다.
비트연산에 대해 더 자세한 설명이 필요하신 분은 구글링을 권해드린다.
혹시 bit연산은 서툴지만, 급한 분들을 위해 반대의 함수도 덧 붙여둔다.
- public static int ColorToInt(Color colorValue)
- {
- int a = colorValue.A << 24;
- int r = colorValue.R << 16;
- int g = colorValue.G << 8;
- int b = colorValue.B;
- return a + r + g + b;
- }
덧.
로직을 간결하게 표시하기 위해 Convert.ToByte, Convert.ToInt32는 생략했다.
Silverlight에서 사용하실 분은 적절히 집어넣어주시길.
정성을 생각해서, 도움이 되셨으면 댓글좀....-.-;;
여러분의 관심이 그린B에게 소스정리의 의욕을 불태워 줍니다. ㄳㄳ (비굴비굴)
'소프트웨어 개발' 카테고리의 다른 글
| ATL ActiveX 만들기 - Part2. 컨트롤 구현 (10) | 2010/06/23 |
|---|---|
| ATL ActiveX 만들기 - Part1. 프로젝트 구성 (12) | 2010/06/22 |
| RGB를 Int32로 변환하기 (8) | 2009/10/13 |
| enum에 여러 상태를 포함시키기 (20) | 2009/10/07 |
| Windows API - CX/CY의 뜻은? (2) | 2009/06/15 |
| Oracle Instant Client를 사용해서 ODAC개발할 때 TypeInitializationException (9) | 2009/06/05 |

Tag //

Comment List
오호, 그런것이군요. 음음..아무튼간에 멋진 문장입니다!! 마키짱님에게 메이드복을 입히고 싶다는 그린B님의 야망과 야심이 드러나는 아주 멋진 문장이예요.
역시 별바람님은 알아봐 주실꺼라 믿었습니다.
public static 메이드 MakiToMade( 마키 m )
{
byte a = (m >> 상체) & 0x탈의;
byte b = (m >> 하체) & 0x탈의;
// 18금이라 상세 코드 중략
return 메이드.From상하체( a, b );
}
실례. 댓글이 넘 재밌어서. ㅎㅎㅎ
(ノ˚ω˚)ノ 大阪の秋が見たいですよ~
오사카가 아니라 나고야라구!!
('' )>...
남의 떡이 커 보인다
수박 겉 핥기