API-고급 그래픽(펜,맵핑모드,변환,팔레트)

윈도우API정복 33장 - 고급 그래픽 

오늘 공부한 내용을 정리해보았다.
자세한것은 www.winapi.com 에서 볼것을 권장함.

고급 그래픽 
 

브러쉬->
        그냥 브러쉬 그리기
비트맵으로 브러쉬 그리기
DIB  패턴 만들어 브러쉬 그리기
브러쉬 원점 조정하기
브러쉬 채우기
그라데이션


-> 그냥 펜 그리기
 
< 펜의 종류 >

코스메틱 펜 : 고정된 폭의 선! 선모양이 단순, 그리는 속도가 빠름. 
지오메트리 펜 : 논리 단위를 사용하므로 폭 조정 가능. 선의 끝부분 처리나 연결부분의 처리에 대한 섬세한 옵션들이 존재.



맵핑 모드 ->
API에서 맵핑 모드(mapping mode) 란 주어진 좌표가 화면상의 실제 어디에 해당하는지를 결정하는방법
윈도우즈에서 사용하는 좌표는 논리 좌표와 물리 좌표 두가지가 있다.

논리 좌표: 윈도우즈 내부에서 사용되는 좌표를 말함. DC핸들을 인수로 받아들이는 모든 함수는 논리 좌표를 사용한다.
물리 좌표: 실제 화면에 출력되는 좌표이며, 픽셀 단위를 사용한다. 모니터의 물리적인 픽셀 단위를 사용하므로 물리 좌표 (100, 100)은 그 위치가 정해져 있다. 윈도우를 관리하는 함수(또는 메시지)에서 사용하는 좌표는 물리 좌표이다.

이 두가지 좌표의 관계를 정의하는것이 맵핑 모드.

맵핑(Mapping)용어는 두가지 사물이 일대일 대응 관계를 정의하는 공식 내지는 함수.

윈도우즈가 디폴트로 사용하는 맵핑 모드에서는 논리 좌표와 물리 좌표가 일치 되어 있다.(어떠한 변환도 일어나지 않은 경우)

맵핑모드 MM_TEXT 픽셀단위
MM_LOMETRIC 0.1mm단위


int SetMapMode() 함수
int GetMapMode() 함수



윈도우와 뷰포트 ->

윈도우(Window): 논리좌표가 사용되는 표면을 말하며, 그래픽 출력 함수는 윈도우에 그래픽을 출력함.
뷰포트(Viewport):는 물리 좌표가 상용되는 영역을 말하며 실제로 상ㅇ자의 눈에 보이는 좌표영역.
원점(Origin): 좌표의 기준이 되는 점. 윈도우즈 API에서 디폴트는 화면의 좌상단(0,0)이다

BOOL SetViewportOrgEx()
BOOL SetWindowOrgEx()
뷰포트의 원점을 지정한 좌표로 이동
윈도우의 원점을 지정한 좌표로 이동

아무거나 옮겨도 되지만 웬만하면 뷰포트 변환이 더 좋다.
->이유는 윈도우의 원점은 논리 단위로 지정되며 ㄴ뷰포트의 원점은 픽셀 단위로 표현되기 떄문이다.

가변 비율 ->

 
윈도우 확장을 조정할 수 있는 맵핑 모드
윈도우 크기가 변해질때 화면의 출력되는 그림의 변화를 나타내기위한 맵핑 모드

BOOL SetWindowExtEx()
BOOl SetViewportExtEx()
MM_ANISOTROPIC 모드
MM_ISOTROPIC 모드



변환 ->

1)그래픽 변환 
윈도우즈의 그래픽 모드는 다음 두가지가 있다.

호환 모드(Conparible Mode): 16비트 윈도우즈와 호환되는 그래픽 모드
확장 모드(Advanced Mode): 윈98과 NT에서만 지원하는 향상된 그래픽 모드

int SetGraphicsMode()

2)좌표공간
-> 점들이 배치되는 2차원 평면 공간이다.
Win32 API는 4가지 종류의 좌표 공간을 제공하는데 각각 월드, 페이지, 디바이스, 물리 디바이스 좌표 공간이다.

페이지 좌표 공간: GDI 함수들이 지정하는 논리 좌표 공간
디바이스 좌표 공간: 실제 화면의 좌표

이 두 좌표간의 변환 공식을 맵핑 모드!

물리 디바이스 좌표는 디바이스 좌표를 실제 모니터에 출력할 때의 좌표인데 이 변환은 운영체제가 직접 관리하므로 프로그래밍 대상이 아니다.


<그림 추가>

월드 좌표 공간을 사용하려면 GM_ADVANCED 그래픽 모드!

BOOL SetWorldTransform() 함수 사용 ( 윈도우 NT이상 )

<변환공식>
_XFORM 구조체 이해

2차 공간의 행렬 변환식 이해

이동
확대
회전

기울이기
뒤집기



팔래트->
동시에 출력할 수 있는 색상의 수는 비디오 메모리의 제약을 받게 되는데 이제약을 극복하려고 팔레트가 등장함
팔레트는 화면에 출력된 점들의 실제 색상을 갖는 일종의 색상 테이블

<종류>
1.시스템 팔레트
->
화면에 동시에 출력할 수 있는 색상들의 테이블이며 이 팔레트의 색상이 실제 화면에 나타남
물리적인 팔레트는 비디오 카드가 소유하며 시스템을 통틀어 하나밖에 없으므로 시스템 팔레트는 윈도우즈에서 실행되는 모든 프로그램이 공유함.
시스템 팔레트가 표현할 수 있는 색상은 최대 256색에 불과함.
요즘은 이 시스템 팔레트를 잘 안사용.
코드를 지저분하게 만들고, 256색을 넘는 트루컬러를 사용하기때문에
하지만 속도가 중요 관심 거리인 게임은 256모드로 사용.

2.논리 팔레트
->
응용 프로그램이 자신의 작업영역을 그리기 위해 가지고 있는 색상표
DC에서 선택할 수 있는 GDI오브젝트의 일종
각 프로그램은 자신의 논리 팔레트를 가지고 있으며 자신이 액티브될 때 논리 팔레트를 시스템 팔레트에 실현(Realize)하

CreatePalette()함수 사용
SelectPalette()함수 사용
RealizePalette()함수 : 시스템팔레트와 맵핑




이 글을 공유하기

댓글

Designed by JB FACTORY