프로그래밍 관련/Win API

WIndows API - #11-1 그래픽 처리 - (특정 색상 제거 , 크기 변경)

QA Engineer - P군 2015. 10. 19. 21:04
반응형

기존에 비트맵을 단순 출력하는것에서 추가적인 효과를 주는법에 대해서 알아보도록 하겠습니다.

 

기본적으로 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까지만 출력됩니다.

 

반응형