상세 컨텐츠

본문 제목

XForm Object

멀티미디어/이미지(Image)

by cepiloth 2020. 12. 12. 14:17

본문

728x90
반응형

XForm Object

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 function (wingdi.h)

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 모드로 재설정 할 수 없습니다 .

 

XForm Transfrom 을 사용하는 예제 

docs.microsoft.com/en-us/windows/win32/gdi/using-coordinate-spaces-and-transformations


ModifyWorldTransform 함수 (wingdi.h)

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 구조 의 데이터 는 오른쪽 승수가되고 현재 변환에 대한 데이터는 왼쪽 승수가됩니다.)

 


GetWorldTransform 함수 (wingdi.h)

The GetWorldTransform function retrieves the current world-space to page-space transformation.

BOOL GetWorldTransform(
  HDC     hdc,	// dc
  LPXFORM lpxf	// xform
);

현재 설정된 world-space 의 값을 가져온다.


ExtTextOut

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영역이 해당색으로 출력됩니다.

 

728x90
반응형

'멀티미디어 > 이미지(Image)' 카테고리의 다른 글

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

관련글 더보기

댓글 영역