2011-12-05 3 views
0

부호없는 int (0xFF998877 등 ...) 형식을 0xAABBGGRR로 사용하여 색상 표시를 변경하려고합니다. 여기서 A는 알파이고 B, G 및 R은 파란색, 녹색 및 빨간색입니다.부호없는 정수 및 색상

하지만 나는 천천히 어두워 지거나 가벼워 지도록 전달하는 색을 변경하는 것이 가장 좋은 방법 일지 궁금합니다.

이 방법으로 부호없는 int에 대한 많은 경험이 없기 때문에 내 솔루션은 단순히 값을 1 씩 줄이는 것이지만 이상한 결과가있었습니다. RGB 요소 만 변경하고 알파를 일정하게 유지하는 좋은 방법이 있습니까? 내가 부족한 연구에서, 다른 최종 결과를 생성하기 위해 다른 서명되지 않은 int를 함께 곱할 수 있다는 것을 알았습니다. (0xFF * 0x99 * 0x99 * 0x99) 그러나 이것은 최종 결과에 여전히 알파 값 변수를 남겨 둡니다.

도움을 주시면 대단히 감사하겠습니다.

+0

난 당신이 HSL로 변환 반대로 값을 직접 조작하고 거기를 조정하려는 경우 비트 연산자에 읽어해야한다고 생각하는 아마도 최고의 솔루션입니다). – LiMuBei

답변

2

색을 HSL(or HSV)으로 변환 한 다음 원하는 밝기 (또는 값)로 변경해야합니다. 그런 다음 다시 RGB로 변환해야합니다.

인터넷에이 전환을 수행하는 데 사용할 수있는 막대한 양의 코드가 있습니다. 당신이 그 일에 곤란을 겪었다면, 나는 당신에게 내 자신의 코드를 제공 할 수있었습니다.

0

C++의 색상 조작에 대해서는 알지 못하지만 간단히 비트 마스크를 사용할 수 있습니까? 또는 4 UINT8 (unsigned char)을 사용하여 색상을 나타내는 클래스를 작성 하시겠습니까? 그런 다음 다른 채널의 모든 종류의 조작을 쉽게 작성할 수 있습니다.

그것은뿐만 아니라 좋은 API를 위해 만들 것입니다 : (

Colour c(128,50,50,0); 
c.saturateRed(10); 
c.darkerBySteps(3); 
c.desaturateGreen(10); 
UINT32 rawColVal = c.getRawValue(); 
관련 문제