2010-02-26 6 views
2

에서 추출합니다. 86 그럼 어떻게이 정수 값에서 r, g, b 성분을 제외 할 수 있습니까? Visual C++ 2008 Express Edition에 대해 연구 중입니다. 감사합니다 ...정수 값이있는 경우 rgb 색상 구성 요소를

+0

먼저 RGB 구성 요소를이 정수로 어떻게 인코딩합니까? –

+0

제가 지금 uptil을했는지 설명해 드리겠습니다 ... 바이트 배열에 파일 내용을 읽었으니 바이트 배열에 0 - 255, 값이 있습니다. 이제이 배열 값을 picturebox에 표시해야합니다. 제어, 그래서 내가 사용, 비트 맵^bmp; bmp->와 setPixel (I, J, 색상 :: FromArgb (BUF [카운트]); // BUF이 바이트 배열 하지만,이 코드는 아무것도 표시되지 않고, 그래서 내가 추출 어쩌면 경우 것을 발견 rgb 구성 요소를 제공하고 Color :: FromArbg (int 빨간색, int 녹색, int 파란색) 인수로 제공합니다 예를 들어. 만약 내가 값 86 있으면 다음 rgb 구성 요소를 얻을 수 있습니다 ..? – JAYMIN

답변

10

일반적으로 (그리고 당신의 질문에 많이 지정하지 않기 때문에) 반복되는 색상은 RGBA 구성 요소가있는 4 바이트 정수로 채워집니다. 이것은 내가 지정된 인코딩의 종류를 가정합니다,하지만 당신에 따라 변경 될 수

int color = 0xRRGGBBAA; 

u8 red = (color & 0xFF000000) >> 24; 
u8 green = (color & 0x00FF0000) >> 16; 
u8 blue = (color & 0x0000FF00) >> 8; 

: 당신이해야 할 일은

예를 들어 마스크와 변화이다.

편집 : 예를 들어 0-255 값에 대해 이야기했습니다. 구성 요소가 2 비트 크기인지 여부는 명확하지 않습니다 (구성 요소 당 4 개의 강도 값).

는이 경우 접근은 여전히 ​​동일하게 유지하지만, 당신은 단지 몇 가지 색상이됩니다

u8 color = 86; 

// so you take 2 bits and multiply by 64 to possibly have intensities: 0, 64, 128, 192 
u8 red = ((color & 0xC0) >> 6) * 64; 
u8 green = ((color & 0x30) >> 4) * 64; 
u8 blue = ((color & 0x0C) >> 2) * 64; 

EDIT2 :은 어쩌면 당신의 색상은 사용자가 저장하는 배열을해야하는 경우, 팔레트 색인 팔레트 자체와 파일에서 읽은 바이트는 다른 곳에 저장된 색의 색인이어야합니다.

+0

감사합니다. 톤 ...! – JAYMIN

0

일반적으로 RGB 매크로를 사용하여 세 가지 구성 요소의 색상을 만들려고합니다. 보유하고있는 값이 같은 형식이라고 가정하면 GetRValue, GetGValueGetBValue을 사용하여 다시 개별 조각으로 가져올 수 있습니다.

관련 문제