- 래스터 연산을 이용한다. 디지털 공학 시간에 배우는 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
원본 그림에 흰색과 검은 색으로 그려진 그림(마스크)을 밑그림에 잘 연산시켜 순서를 잘 맞춰 그리면 원하는 그림이 나오는 것이다. 마스크는 밑의 두개중 아무거나 사용한다.