XForm 의 자료구조는 위와 같이 정의된다.
M11 (4 바이트) : FLOAT 매트릭스 값.
M12 (4 바이트) : FLOAT 매트릭스 값.
M21 (4 바이트) : FLOAT 매트릭스 값.
M22 (4 바이트) : FLOAT 매트릭스 값.
Dx (4 바이트) : 논리 단위로 된 수평 변환 구성 요소 를 포함하는 FLOAT 값입니다 .
Dy (4 바이트) : 논리 단위로 된 수직 변환 구성 요소를 포함하는 FLOAT 값입니다.
다음 방정식은 행렬 값을 사용하여 점 (X, Y)을 새 점 (X ', Y')으로 변환하는 방법을 지정합니다.
X '= M11 * X + M21 * Y + Dx
Y '= M12 * X + M22 * Y + Dy
SetWorldTransform의 함수는 지정된 디바이스 컨텍스트에 대한 세계의 공간과 페이지 공간 사이 이차원 선형 변환을 설정한다. 이 변환은 그래픽 출력의 크기를 조정, 회전, 기울이거나 변환하는 데 사용할 수 있습니다.
BOOL SetWorldTransform(
HDC hdc, // 장치 컨텍스트에 대한 핸들(DC)
const XFORM *lpxf // 변환 데이터를 포함하는 XFORM 구조에 대한 포인터
);
아래는 변환 행렬입니다 (요소 표기법의 숫자는 역순이 아니라 1 기반 열 번호와 1 기반 행 번호입니다).
| eM11 eM21 eDx |
| eM12 eM22 eDy |
| 0 0 1 |
따라서 월드 공간의 모든 좌표 (x, y)에 대해 페이지 공간 (x ', y')의 변환 된 좌표는 아래 표시된 방식으로 결정될 수 있습니다.
| x' | | eM11 eM21 eDx | | x |
| y' | = | eM12 eM22 eDy | . | y |
| 1 | | 0 0 1 | | 1 |
x' = x * eM11 + y * eM21 + eDx
y' = x * eM12 + y * eM22 + eDy
이 기능은 논리 단위를 사용합니다.
일반적으로 세계 변환은 장치 독립적 인 방식으로 논리적 이미지의 크기를 조정하거나 회전하는 데 사용됩니다.
기본 세계 변환은 오프셋이 0 인 단위 행렬입니다.
SetWorldTransform의 주어진 디바이스 컨텍스트의 그래픽 모드는 이전 호출 GM_ADVANCED로 설정되어 있지 않은 기능이 실패 SetGraphicsMode의 기능. 마찬가지로, SetWorldTransform 또는 ModifyWorldTransform 을 호출하여 세계 변환이 기본 ID 변환으로 먼저 재설정되지 않는 한 장치 컨텍스트의 그래픽 모드를 기본 GM_COMPATIBLE 모드로 재설정 할 수 없습니다 .
docs.microsoft.com/en-us/windows/win32/gdi/using-coordinate-spaces-and-transformations
ModifyWorldTransform의 함수는 지정된 모드를 이용한 디바이스 컨텍스트에 대한 세계의 변환을 바꾼다.
BOOL ModifyWorldTransform(
HDC hdc, // DC
const XFORM *lpxf, // World Transform 을 수행하기위한 자료구조
DWORD mode // World Transform 을 수행 하는 방법
);
mode 타입 정의
MWT_IDENTITY | 단위 행렬을 사용하여 현재 세계 변환을 재설정합니다. 이 모드가 지정되면 lpXform 이 가리키는 XFORM 구조 는 무시됩니다. |
MWT_LEFTMULTIPLY | 현재 변환에 XFORM 구조 의 데이터를 곱합니다 . ( XFORM 구조 의 데이터 는 왼쪽 곱셈이되고 현재 변환의 데이터는 오른쪽 곱이됩니다.) |
MWT_RIGHTMULTIPLY | 현재 변환에 XFORM 구조 의 데이터를 곱합니다 . ( XFORM 구조 의 데이터 는 오른쪽 승수가되고 현재 변환에 대한 데이터는 왼쪽 승수가됩니다.) |
The GetWorldTransform function retrieves the current world-space to page-space transformation.
BOOL GetWorldTransform(
HDC hdc, // dc
LPXFORM lpxf // xform
);
현재 설정된 world-space 의 값을 가져온다.
ExtTextOut함수는 좌표와 영역을 함께 사용하는 출력 함수입니다.
BOOL ExtTextOut(
HDC hdc, // 디바이스 컨텍스 핸들
int X, // 출력 X좌표
int Y, //출력 Y좌표
UINT fuOptions, // 출력 옵션
CONST RECT *lprc, //출력 박스 영역
LPCTSTR lpString, // 출력 문자열
UINT cbCount, // 출력 문자 길이
CONST INT *lpDx // 문자열의 원점으로부터 출력 값의 배열
);
fuOptions를 ETO_CLIPPED로 설정하였을경우에는 X,Y값이 무시된다. lprc박스 영역이 유효화 하여 이영역에 문자열을 출력시킵니다.
fuOption중에 ETO_OPAQUE는 출력할 영역의 배경을 현재 설정된 배경색으로 설정할수 있습니다. 만일 ExtTextOut함수이전에 SetBkColor 함수를 사용하여 배경색으로 특정 색을 설정하면 lprc영역이 해당색으로 출력됩니다.
toojpeg (0) | 2021.01.06 |
---|---|
EMR_HEADER 식별 (0) | 2020.12.12 |
CxImage (0) | 2020.10.06 |
LibJPEG 9.D Window 빌드 하기 (0) | 2020.09.21 |
libUEMF (0) | 2020.07.15 |
댓글 영역