Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

창섭/BitmapMasking: Difference between revisions

From ZeroWiki
imported>Unknown
No edit summary
 
(Repair MoniWiki formatting after migration)
 
Line 43: Line 43:
| 흰색
| 흰색
|}
|}
이렇게 된다. 다시 본론으로 돌아가서...우리가 하고 싶은 일은 그림의 배경을 잘라 내고 원하는 모양만을 밑그림에 붙이는 것이다. 따라서 우리는 배경은 무시되고 원하는 부분의 밑그림이 무시되어야 한다.
이렇게 된다. 다시 본론으로 돌아가서...우리가 하고 싶은 일은 그림의 배경을 잘라 내고 원하는 모양만을 밑그림에 붙이는 것이다. 따라서 우리는 배경은 무시되고 원하는 부분의 밑그림이 무시되어야 한다.<br />
<원본 그림>
<원본 그림>
http://165.194.17.15/~wiz/data/zpwiki/originalbmp.bmp
http://165.194.17.15/~wiz/data/zpwiki/originalbmp.bmp
Line 50: Line 50:
<원하는 결과>
<원하는 결과>
http://165.194.17.15/~wiz/data/zpwiki/resultbmp.bmp
http://165.194.17.15/~wiz/data/zpwiki/resultbmp.bmp
 
<br />
원본 그림에 흰색과 검은 색으로 그려진 그림(마스크)을 밑그림에 잘 연산시켜 순서를 잘 맞춰 그리면 원하는 그림이 나오는 것이다. 마스크는 밑의 두개중 아무거나 사용한다.
원본 그림에 흰색과 검은 색으로 그려진 그림(마스크)을 밑그림에 잘 연산시켜 순서를 잘 맞춰 그리면 원하는 그림이 나오는 것이다. 마스크는 밑의 두개중 아무거나 사용한다.
== 원리2 ==
== 원리2 ==
Line 80: Line 80:
----
----
[[창섭]]
[[창섭]]

Latest revision as of 14:01, 26 March 2026

소개

  • MFC 의 경우다.
  • 우리가 비트맵을 불러다 쓸때 늘 사각형 모양으로 불러다 쓴다. 하지만 불러다 쓰고 싶은 모양이 사각형이 아니지만 본의 아니게 배경색까지 따라 찍힌다. 이 때 사용한다.
  • 비트맵 불러다 쓸때..(MFC에서) 마스크 써서 배경 처리하는걸 래스터 연산 생각하며 따지는게 귀찮아서 담엔 보고 하려고 만든다..;;

원리1

  • 래스터 연산을 이용한다. 디지털 공학 시간에 배우는 OR, AND, XOR 등을 비트맵에서도 적용할 수 있다. 여기서는 XOR 은 쓰지 않아도 된다.
  • 보통 비트맵을 불러올 때 마지막에 이부분이 있다. (코드의 다른 설명은 추가하지 않겠음. 논의를 벗어나므로..)
	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 연산하면
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
원본 그림에 흰색과 검은 색으로 그려진 그림(마스크)을 밑그림에 잘 연산시켜 순서를 잘 맞춰 그리면 원하는 그림이 나오는 것이다. 마스크는 밑의 두개중 아무거나 사용한다.

원리2

  • 그림은 검은색을 만날 땐 OR 연산하고 흰색을 만날 땐 AND 연산하다~!! B)
  • 반면에 검은색을 만날 땐 AND 연산하고 흰색을 만날 땐 OR 연산하다... :(
  • 따라서 무시될 부분은 약하고 보일 부분은 강해지도록 배경색을 정하고 마스크를 정한다.
  • 우리는 그림이 이기고~! 그림 외의 부분은 밑그림이 이겨야 한다~!
    1. 밑그림을 먼저 깔아놓고...
    2. 그 위에 배경자리는 밑그림이 이기고 그림자리는 그림이 이기도록.. 마스크의 색깔을 정한다.
    3. 이제 다음과 같이 된다.

마스크 1 사용

  • 사용하는 마스크

http://165.194.17.15/~wiz/data/zpwiki/andmask.bmp

  • 이때 그림 주변의 배경 색깔

http://165.194.17.15/~wiz/data/zpwiki/orbmp.bmp

순서

  1. 밑그림을 찍는다.
  2. 마스크를 SRCAND 연산 한다.
  3. 그림을 SRCPAINT 연산 한다.

마스크 2 사용

  • 사용하는 마스크

http://165.194.17.15/~wiz/data/zpwiki/ormask.bmp

  • 이때 그림 주변의 배경 색깔

http://165.194.17.15/~wiz/data/zpwiki/andbmp.bmp

순서

  1. 밑그림을 찍는다.
  2. 마스크를 SRCPAINT 연산 한다.
  3. 그림을 SRCAND 연산 한다.

창섭