다음을 통해 공유


색상 회전

4차원 색 공간의 회전은 시각화하기 어렵습니다. 색 구성 요소 중 하나를 고정하는 데 동의하여 회전을 보다 쉽게 시각화할 수 있습니다. 알파 구성 요소를 1(완전히 불투명)으로 고정하는 데 동의한다고 가정합니다. 그런 다음 다음 그림과 같이 빨간색, 녹색 및 파란색 축으로 3차원 색 공간을 시각화할 수 있습니다.

3차원 색 공간의 원근감 있는 뷰 그림, 축에는 빨강, 녹색, 파란색이 레이블로 지정됨

색은 3차원 공간의 포인트로 생각할 수 있습니다. 예를 들어 공간의 점(1, 0, 0)은 빨간색을 나타내고 공간의 점(0, 1, 0)은 녹색을 나타냅니다.

다음 그림에서는 Red-Green 평면에서 60도 각도로 색(1, 0, 0)을 회전하는 것이 무엇을 의미하는지 보여 줍니다. Red-Green 평면과 평행한 평면의 회전은 파란색 축에 대한 회전이라고 생각할 수 있습니다.

(1, 0, 0) 점이 60도 회전하여 (0.5, 0.866, 0) 새 위치를 나타내는 그림

다음 그림에서는 세 개의 좌표 축(빨강, 녹색, 파랑)에 대한 회전을 수행하도록 색 행렬을 초기화하는 방법을 보여 줍니다.

세 개의 좌표 축 각각에 대해 회전을 수행하는 색 행렬을 보여 주는 그림

다음 예제에서는 모두 하나의 색(1, 0, 0.6)인 이미지를 가져와 파란색 축에 대해 60도 회전을 적용합니다. 회전 각도는 Red-Green 평면과 평행한 평면에서 스윕됩니다.

Image            image(L"RotationInput.bmp");
ImageAttributes  imageAttributes;
UINT             width = image.GetWidth();
UINT             height = image.GetHeight();
REAL             degrees = 60;
REAL             pi = acos(-1);  // the angle whose cosine is -1.
REAL             r = degrees * pi / 180;  // degrees to radians

ColorMatrix colorMatrix = {
   cos(r),  sin(r), 0.0f, 0.0f, 0.0f,
   -sin(r), cos(r), 0.0f, 0.0f, 0.0f,
   0.0f,    0.0f,   1.0f, 0.0f, 0.0f,
   0.0f,    0.0f,   0.0f, 1.0f, 0.0f,
   0.0f,    0.0f,   0.0f, 0.0f, 1.0f};
   
imageAttributes.SetColorMatrix(
   &colorMatrix, 
   ColorMatrixFlagsDefault,
   ColorAdjustTypeBitmap);
   
graphics.DrawImage(&image, 10, 10, width, height);

graphics.DrawImage(
   &image, 
   Rect(130, 10, width, height),  // destination rectangle 
   0, 0,        // upper-left corner of source rectangle 
   width,       // width of source rectangle
   height,      // height of source rectangle
   UnitPixel,
   &imageAttributes);

다음 그림에서는 왼쪽의 원래 이미지와 오른쪽의 색 회전 이미지를 보여 줍니다.

사각형이 원본 이미지(보라 빨강)와 색 회전된 이미지(바다 녹색)로 채워진 것을 보여주는 그림

앞의 코드 예제에서 수행된 색 회전은 다음과 같이 시각화할 수 있습니다.

3차원 색 공간을 보여주는 그림과, 점 (1, 0, 0.6)이 60도 회전하여 (0.5, 0.866, 0.6)로 변환된 상태를 나타냅니다.