이 블로그는 http://blog.greenmaru.com으로 이동 하였습니다.
2010년 12월 이후 업데이트는 새로운 블로그를 통해서만 이루어 집니다. 현재 보고 계신 페이지는 2011년 12월에 없어질 예정 이므로, 필요하신 분께서는 새로운 블로그로 링크를 변경해 주시기 바랍니다.
번거롭게 해 드려 죄송합니다.
<greenb>

RGB를 Int32로 변환하기

Silverlight는 WPF중에서도 일부만 구현해 놓다보니, 예상치 못한 제약들이 곳곳에서 튀어나와서 심심하지 않게 해준다. -_-

아무튼. 오늘의 문제

  1. Int32형으로 저장된 RGB값을 Silverlight에서 읽어서 사용해야 한다.
  2. Silverlight는 System.Drawing.Color가 아닌, System.Windows.Media.Color를 사용한다.
  3. System.Windows.Media.Color.FromArgb메써드는 Int32를 인자로 받는 구현이 없다!! OTL..

결국, 한참 해맨끝에 RGB를 Int32로 만드는 꽁수를 밝혀냈다. (나 좀 짱인듯?ㅋㅋ-_-..)

  1. Alpha, Red, Green, Blue는 각각 8bit로 색상 정보를 표현한다. (0~255 = 8bit 범위)
  2. Int32는 당연하게도-_- 32bit이다.
  3. 32bit 메모리를 각각 8bit씩 4개 구역으로 나눠서 ARGB값을 넣으면, Int32 하나로 색상정보를 표현할 수 있다!

ㅇㅋㅂㄹ. 여기까지 오는데 한나절 걸렸다 ㅠㅠㅠㅠ 그러면 이제 각각의 bit block을 분리해주시면 되겠군요~

  1. public static Color IntToColor(int colorValue)   
  2. {   
  3.     byte a = (colorValue >> 24) & 0xFF;   
  4.     byte r = (colorValue >> 16) & 0xFF;   
  5.     byte g = (colorValue >> 8) & 0xFF;   
  6.     byte b = (colorValue) & 0xFF;   
  7.   
  8.     return Color.FromArgb(a, r, g, b);      
  9. }  

각각의 정보를 얻기위해 8bit씩을 시프트하고, 아래쪽 8bit만을 얻기 위해 0xFF(255)로 마스킹 해주면 된다.
이렇게 하면 16777215는 FromArgb(0, 255, 255, 255)의 투명색과 일치한다.

비트연산에 대해 더 자세한 설명이 필요하신 분은 구글링을 권해드린다.
혹시 bit연산은 서툴지만, 급한 분들을 위해 반대의 함수도 덧 붙여둔다.

  1. public static int ColorToInt(Color colorValue)   
  2. {   
  3.     int a = colorValue.A << 24;   
  4.     int r = colorValue.R << 16;   
  5.     int g = colorValue.G << 8;   
  6.     int b = colorValue.B;   
  7.   
  8.     return a + r + g + b;   
  9. }  

덧.

로직을 간결하게 표시하기 위해 Convert.ToByte, Convert.ToInt32는 생략했다.
Silverlight에서 사용하실 분은 적절히 집어넣어주시길.

정성을 생각해서, 도움이 되셨으면 댓글좀....-.-;;
여러분의 관심이 그린B에게 소스정리의 의욕을 불태워 줍니다. ㄳㄳ (비굴비굴)

저작자 표시 비영리 변경 금지
Tag // , ,

Trackback Address >> http://greenmaru.com/trackback/75 관련글 쓰기

Comment List

  1. BlogIcon 별바람 2009/10/13 19:44 address / modify or delete / reply

    오호, 그런것이군요. 음음..아무튼간에 멋진 문장입니다!! 마키짱님에게 메이드복을 입히고 싶다는 그린B님의 야망과 야심이 드러나는 아주 멋진 문장이예요.

    • BlogIcon 그린B 2009/10/13 21:56 address / modify or delete

      역시 별바람님은 알아봐 주실꺼라 믿었습니다.

    • 미히 2009/10/14 15:51 address / modify or delete

      public static 메이드 MakiToMade( 마키 m )
      {
      byte a = (m >> 상체) & 0x탈의;
      byte b = (m >> 하체) & 0x탈의;
      // 18금이라 상세 코드 중략
      return 메이드.From상하체( a, b );
      }

      실례. 댓글이 넘 재밌어서. ㅎㅎㅎ

  2. BlogIcon NIXXXON 2009/10/13 20:14 address / modify or delete / reply

    (ノ˚ω˚)ノ 大阪の秋が見たいですよ~

  3. BlogIcon 천사 2012/01/10 20:22 address / modify or delete / reply

    남의 떡이 커 보인다

  4. BlogIcon 아가 2012/01/13 03:35 address / modify or delete / reply

    수박 겉 핥기

|  1  | ...  27  |  28  |  29  |  30  |  31  |  32  |  33  |  34  |  35  | ...  104  |