E D R , A S I H C RSS

bitblt로 투명배경 구현하기

bitblt로 투명배경 구현하기

�름�야 멋지게 지었지만, 투명배경��고 해�, 사실� 배경� 보�게 �미지를 겹�그린다는 뜻입니다.^^
아무� 만들지 않�것 같아서..미숙하나마~만들어 보았어요.^^

�가지 그림� 합치면 좋���, bitblt로 합치면 사�형으로 합치니까 �그�미�� 그리는 날엔,
�그�미� 배경� 뒤� 그림� 지워버려요.

그럼 어떻게 하면 �까요? 답부터 보여드리�면 �렇게~!

�그림과

zeropage:back02.jpg

�그림�

char02.jpg

OR연산 해버리면..

last_1.jpg

간단하죠~?

(OR연산�란! 0or0=0 0or1=1 1or0=1 1or1=1 ��는 연산입니다. 다시�해 0과 어떤값� or연산하면 어떤값� 그대로 나오게 �죠.^^
검�색� 000000000000000000000000�니까 (bit로 ㅎ 갯수가 맞나?)어떤색� or연산해� 그색 그대로 나온답니다.^^)

�.. 그럼 지금부터 아래� � 그림으로 연산� 시작해 봅시다~!^^
�개� 그림� DC가 준비�어 있어야 해요.^^

hdc_original

char01.jpg

hdc_background

back01_1.jpg

편�� 같� �기� 그림� 준비했습니다.^^
��� DC� 그림� 설정하는거 잊지마시구요.^^
그림� 가로� �기는 size_x 세로� �기는 size_y� �수로 하겟습니다.^^
그리고 투명화� 색�� RGB값 255,0,255입니다.^^

우선 앞으로 사용� mask� 사용� DC를 만들어 봅시다.^^
~cpp 
HDC hdc_mask; 
HBITMAP bitmap_mask;
hdc_mask= CreateCompatibleDC( hdc_background ); 
bitmap_mask=CreateBitmap(size_x, size_y, 1, 1, NULL); //mask로 사용할 �백 비트맵� �성합니다~!'ㅇ')/
SelectObject(hdc_mask,bitmap_mask);
�~ �백 비트맵� 만들었습니다.^^
�제 마스�를 만들어 봅시다~!^^
~cpp 
SetBkColor(hdc_original, RGB(255,0,255) );
BitBlt(hdc_mask,0,0,size_x,size_y,hdc_original,0,0,SRCCOPY);
배경으로 사용� 색(RGB(255,0,255))�외�는 모� 검�색으로 만들어 주었습니다.^^
배경으로 사용�는 색� �색� �었구요.^^ 그러니까 결과는..

char_mark.jpg

�런 값� 저장�니다.^^
�제 우리 �� 주�공뒤� 배경색� 검�색으로 바꾸어 �시다.^^
~cpp 
SetBkColor(hdc_original, RGB(0,0,0));
SetTextColor(hdc_original, RGB(255,255,255));
BitBlt(hdc_original,0,0,size_x,size_y,hdc_mask,0,0,SRCAND);
AND연산� 사용했어요.^^
(AND연산�란? 0and0=0 0and1=0 1and0=0 1and1=1 다시�해 0과 and연산�하면 무조건 0으로! 1과 and 연산�하면 대입한값 그대로 나오는,
특정 부분만 골�내기 딱좋� 연산입니다.^^)
그래서 결과는..

char02.jpg

�렇게 �겠습니다.^^
아 �뽀..~>�<;;
��.. 진정하고, �제는 배경� 처리를 해줘야 겠죠?
~cpp 
SetBkColor(hdc_background, RGB(255,255,255));
SetTextColor(hdc_background, RGB(0,0,0));
BitBlt(hdc_background,0,0,size_x,size_y,hdc_mask,0,0,SRCAND);
�극� AND연산.. � 시전�었습니다.^^
결과는..

back02_1.jpg

�렇게 �꺼예요.^^
�제 마지막 연산! OR로 합� 봅시다!~^^
~cpp 
BitBlt(hdc_background,0,0,size_x,size_y,hdc_original,0,0,SRCPAINT);
last.jpg

�. 모� �났어요~!
항� 마지막�는 쓰레기는 쓰레기통�~! 뒷정리는 깔�히!!
~cpp 
DeleteDC(hdc_mask);
DeleteObject(bitmap_mask);
잊지 마세요.^^

휴~ 초보�서 그런지 제대로 �었�지 모르겠네요..^^
현제 사용중� 소스�걸 조금 변형해서 복사한터�.^^ 실수가 없으면 좋으련만..
��~ 틀린� 발견�면 즉시 수정해주세요.^^

그럼~~ㅎ

-----
현재 필요한것�..
프로그램� 컴파�해주는 컴파�러� 아니요..
버그를 잡아주는 디버그� 아니다..
귀차니즘� 한방� 날려줄 #include <부지런함> � 가능한 전처리기.. 어디없나? 휴..

결국 마스� 비트맵� 메모리��서 만들어서 한장 비트맵으로 투명 배경만들기하는 거 였네 ㅡ.ㅡ;
�런거 �고 좌우로 ��으로 바꿔서 그려주는 방법� 엄나;;;

엮어가기

(beonit)레�즈프로�트/프로토타입�서 MFC기반으로 �블 버��� �함해서 간단하게 �래싱 해 보았습니다.
----
프로그래�분류
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:36
Processing time 0.0079 sec