회전 색
4차원 색 공간에서 회전은 시각화하기에 매우 어렵습니다. 색 구성 요소 중 하나를 고정으로 유지하는 데 동의하여 회전을 더 쉽게 시각화할 수 있습니다. 우리가 알파 구성 요소를 1(완전히 불투명)로 고정하는 데 동의한다고 가정합시다. 그런 다음 3차원 색 공간을 다음 그림에 나타난 대로 빨간색, 녹색, 파란색 축으로 시각화할 수 있습니다.
색은 3D 공간의 포인트로 생각할 수 있습니다. 예를 들어, 공간에서 점 (1, 0, 0)은 빨간색을 나타내고, 공간에서 (0, 1, 0)은 녹색을 나타냅니다.
다음 그림에서는 빨간색-녹색 평면에서 60도 각도로 색 (1, 0, 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);
다음 그림에서는 왼쪽의 원래 이미지와 오른쪽의 색 회전 이미지를 보여 줍니다.
앞의 코드 예제에서 수행된 색 회전은 다음과 같이 시각화할 수 있습니다.