다음을 통해 공유


회전 색

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

빨강, 녹색 및 파란색으로 레이블이 지정된 축이 있는 3차원 색 공간의 원근감 보기 그림

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

다음 그림에서는 빨간색-녹색 평면에서 60도 각도로 색 (1, 0, 0)을 회전하는 것임을 보여줍니다. 빨간색-녹색 평면에 평행한 평면에서 회전은 파란색 축을 중심으로 회전으로 생각할 수 있습니다.

점(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)