1. 소개 ¶
- MFC 의 경우다.
- 우리가 비트맵을 불러다 쓸때 늘 사각형 모양으로 불러다 쓴다. 하지만 불러다 쓰고 싶은 모양이 사각형이 아니지만 본의 아니게 배경색까지 따라 찍힌다. 이 때 사용한다.
- 비트맵 불러다 쓸때..(MFC에서) 마스크 써서 배경 처리하는걸 래스터 연산 생각하며 따지는게 귀찮아서 담엔 보고 하려고 만든다..;;
1.1. 원리1 ¶
- 래스터 연산을 이용한다. 디지털 공학 시간에 배우는 OR, AND, XOR 등을 비트맵에서도 적용할 수 있다. 여기서는 XOR 은 쓰지 않아도 된다.
- 보통 비트맵을 불러올 때 마지막에 이부분이 있다. (코드의 다른 설명은 추가하지 않겠음. 논의를 벗어나므로..)
~cpp dc.BitBlt(0, 0, 100, 100, &memDC, 0, 0, SRCCOPY);
여기서 SRCCOPY 라는 부분이 있는데 이게 래스터 연산자(Rastor OPeration) 이다. 종류는 다음과 같다.
SRCCOPY | 그대로 복사 |
SRCPAINT | OR 연산 |
SRCAND | AND 연산 |
SRCINVERT | XOR 연산 |
3비트 짜리 비트맵 코드(는 없겠지만...; )를 예로 든다면... 검은색은 000 이고 흰색은 111 이다. 그리고자 하는 비트맵이 101 이라면, 검은색과 원본을 AND 연산하면
~cpp 000 101 --- 000이 되어 원본이 무시된다. 이것을 정리하면
원본과 상대할(?) 색 | SRCAND(AND)의 결과 | SRCPAINT(OR)의 결과 |
검은 색 | 검은 색 | 무변 |
흰색 | 무변 | 흰색 |
<원본 그림>
http://165.194.17.15/~wiz/data/zpwiki/originalbmp.bmp
<밑 그림>
http://165.194.17.15/~wiz/data/zpwiki/bgbmp.bmp
<원하는 결과>
http://165.194.17.15/~wiz/data/zpwiki/resultbmp.bmp
원본 그림에 흰색과 검은 색으로 그려진 그림(마스크)을 밑그림에 잘 연산시켜 순서를 잘 맞춰 그리면 원하는 그림이 나오는 것이다. 마스크는 밑의 두개중 아무거나 사용한다.
1.2. 원리2 ¶
- 그림은 검은색을 만날 땐 OR 연산에 강하고 흰색을 만날 땐 AND 연산에 강하다~!!
- 반면에 검은색을 만날 땐 AND 연산에 약하고 흰색을 만날 땐 OR 연산에 약하다...
- 따라서 무시될 부분은 약하고 보일 부분은 강해지도록 배경색을 정하고 마스크를 정한다.
- 우리는 그림이 이기고~! 그림 외의 부분은 밑그림이 이겨야 한다~!
- 밑그림을 먼저 깔아놓고...
- 그 위에 배경자리는 밑그림이 이기고 그림자리는 그림이 이기도록.. 마스크의 색깔을 정한다.
- 이제 다음과 같이 된다.
- 밑그림을 먼저 깔아놓고...
1.2.1. 마스크 1 사용 ¶
- 사용하는 마스크
- 이때 그림 주변의 배경 색깔
1.2.2. 마스크 2 사용 ¶
- 사용하는 마스크
- 이때 그림 주변의 배경 색깔