그리기 모드란 도형이 그려질 때 원래 그려져 있던 그림과 새로 그려지는 그림과의 관계를 정의하는 것을 말한다.
그리기 모드를 개념적으로 이해하기 위해 아주 단순한 흑백의 그래픽 환경을 가정해 보자.
무엇인가를 화면에 그린다는 것은 비디오 메모리에 그림의 이미지를 기록해 넣는 동작을 말하며 이 때 원래 비디오 메모리에 있던
값과 새로 써지는 값 사이의 관계를 생각해 볼 수 있다.
가장 단순하게는 새로 그려지는 값으로 원래 있던 값을 덮어 버리는 경우가 있으며 비트 논리 연산에 의해 두 값을 적당히 혼합하는 방법들도 있다.다음 그림은 두 개의 흑백 그림을 4가지 비트 연산으로 합쳐본 것이다.
가로로 놓인 막대가 원래 그려져 있던 그림이며 세로로 놓여져 있는 막대가 새로 그려지는 그림이다.
첫 번째 COPY는 새로 그려지는 그림이 기존 그림을 완전히 덮어 버리는 것인데, 이 때 원래 그려져 있던 가로 막대는 세로 막대에 의해 덮여 사라져 버린다.
두 번째의 OR은 두 그림의 대응되는 비트를 OR연산하여 새로운 값을 만들어 써 넣는다. 즉 두 비트가 모두 1이거나 둘 중 하나라도 1이면
1이 쓰여지며, 둘 다 0일 경우에만 0을 써넣는다.
세 번째 AND연산은 두 그림의 교집합 영역만 그려지며, XOR연산은 두 그림중 겹쳐지지 않는 부분만 그려진다.
아래의 표를 보면 쉽게 이해할 수 있을 것이다.
흑백에서의 비트 연산은 0(검정색) 또는 1(흰색)만 있기 때문에 이렇게 이해하기 쉽지만 여러 가지 색상을 사용하는 컬러 그래픽 환경에서의 비트 연산은 이보다 훨씬 더 복잡하다.
그리기 모드의 종류_____
원도우즈에서 사용하는 디폴트 그리기 모드는 R2_COPYPEN 모드이며, 그려지는 그림이 기존 그림을 덮어버린다.
그리기 모드를 변경하는 함수와 현재 설정된 그리기 모드를 구하는 함수는 다음과 같다.
int SetROP2(HDC hdc, int fnDrawMode);
int GetROP2(HDC hdc);
첫 번째 인수는 그리기 모드를 변경(또는 조사)하고자 하는 DC의 핸들이며 SetROP2 함수의 두 번째 인수에는 다음과 같은 그리기 모드값을 넘겨준다.
이 외에도 몇 가지 그리기 모드가 더 있지만 주로 NOT연산자를 중간중간에 넣은 것들이며 현실적으로 거의 사용되지 않는다.
GetROP2 함수는 DC에 설정되어 있는 현재 그리기 모드값을 리턴한다.
'API' 카테고리의 다른 글
| 컨트롤 - 푸시 버튼 (0) | 2018.02.04 |
|---|---|
| 그리기 모드(코드) (0) | 2018.01.24 |
| Old의 의미 (0) | 2018.01.22 |
| 브러쉬 만들기 (0) | 2018.01.22 |
| 나만의 펜을 만들어 보자! (0) | 2018.01.20 |