기존에 비트맵을 단순 출력하는것에서 추가적인 효과를 주는법에 대해서 알아보도록 하겠습니다.
기본적으로 WINAPI에서 비트맵을 출력할때는 사각형 모양으로 밖에 출력되지 않습니다.
물론 흰색 바탕에 흰색배경이 있는 이미지라면 상관 없겠지만 다른 색상일 경우 위와 같이 사각형의 테두리가 발생되기 마련입니다.
위에 깜찍한 무지가 있지만 이 무지의 주변에 보라색만 제거하고 싶을때 어떻게 해야할까요?
TransparentBlt 함수가 있지만 Gdi32.lib 파일을 포함시켜야만 하는데, 윈도우 2000 이상부터는 GdiTransparentBlt 함수를 사용하여,
동일한 기능을 할 수 있습니다.(해당 기능의 헤더 파일은 WinGdi.h (include Windows.h))
GdiTransparentBlt
: 특정 소스로부터 픽셀에 대응하는 사각형의 데이터 비트 블록을 전송합니다.
- 해당 함수의 기능은 TransparentBlt와 완전히 같습니다.
BOOL GdiTransparentBlt( _In_ HDC hdcDest, _In_ int xoriginDest, _In_ int yoriginDest, _In_ int wDest, _In_ int hDest, _In_ HDC hdcSrc, _In_ int xoriginSrc, _In_ int yoriginSrc, _In_ int wSrc, _In_ int hSrc, _In_ UINT crTransparent ); |
의미 | 매개 변수 |
hdcDest | 복사의 대상이 되는 device context의 handle 값입니다. |
xoriginDest | 대상 사각형의 왼쪽 위 모서리의 논리 단위입니다. (x 좌표) |
yoriginDest | 대상 사각형의 왼쪽 위 모서리의 논리 단위입니다. (y 좌표) |
wDest | 대상 사각형의 논리 단위 폭입니다. |
hDest | 대상 사각형의 논리 단위 높이입니다. |
hdcSrc | 복사될(소스) 대상의 device context의 handle 값입니다. |
xoriginSrc | 소스 구형의 논리 단위로 x좌표입니다. |
yoriginSrc | 소스 구형의 논리 단위로 y좌표입니다 |
wSrc | 소스 사각형의 논리 단위 폭입니다. |
hSrc | 소스 사각형의 논리 단위 높이입니다. |
crTransparent | 원본 비트맵의 투명처리될 RGB 값입니다. |
그럼 코드를 작성해보겠습니다.
[결과] |
보라색(RGB 255,0,255)값이 모두 사라졌으며, 보이지 않던 사각형이 확인됩니다.
그럼 추가로 이미지를 확대해보겠습니다.
해당 매개 변수에서 wDest , hDest , wSrc , hSrc 값만 변경하였습니다.
-> GdiTransparentBlt(hdc , 0 , 0 , 400 , 400 , MemDC , 0 , 0 , 100, 100 ,RGB(255,0,255));
이미지가 원본 크기 192->400으로 확대 되었으며, 원본 이미지의 전체(192)에서 0-100까지만 출력됩니다.
'프로그래밍 관련 > Win API' 카테고리의 다른 글
WIndows API - #11-2 그래픽 처리 - (알파 블랜딩) (2) | 2015.10.19 |
---|---|
WIndows API - #10-3 그래픽 처리 - (맵핑 - 좌표 공간과 변환) (0) | 2015.10.11 |
WIndows API - #10-2 그래픽 처리 - (맵핑 - 원점 바꾸기) (2) | 2015.10.11 |
WIndows API - #10-1 그래픽 처리 - (맵핑 - 윈도우 좌표) (0) | 2015.10.10 |
WIndows API - #9-7 그래픽 처리 - (여러개의 DC 이미지 출력하기) (2) | 2015.10.09 |