프로그래밍 관련/Win API

WIndows API - #11-2 그래픽 처리 - (알파 블랜딩)

QA Engineer - P군 2015. 10. 19. 22:48
반응형

이번에는 비트맵에 알파 블랜딩(투명)을 하는법에 대해서 알아보겠습니다.
AlphaBlend함수가 있지만 Gdi32.lib 파일을 포함시켜야만 하는데, 윈도우 2000 이상부터는 GdiAlphaBlend함수를 사용하여, 

동일한 기능을 할 수 있습니다. (해당 기능의 헤더 파일은 WinGdi.h (include Windows.h))

 

GdiAlphaBlend

: 투명 또는 반투명 픽셀 비트맵을 표시합니다.

- 해당 함수의 기능은 AlphaBlend와 완전히 같습니다.

 

 BOOL GdiAlphaBlend(
_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_ BLENDFUNCTION ftn );

 

 의미  매개 변수 
 hdcDest,  복사의 대상이 되는 device context의 handle 값입니다.
 xoriginDest,  대상 사각형의 왼쪽 위 모서리의 논리 단위입니다. (x 좌표)
 yoriginDest,  대상 사각형의 왼쪽 위 모서리의 논리 단위입니다. (y 좌표)
 wDest,  대상 사각형의 논리 단위 폭입니다.
 hDest,  대상 사각형의 논리 단위 높이입니다.
 hdcSrc,  복사될(소스) 대상의 device context의 handle 값입니다.
 xoriginSrc,  소스 구형의 논리 단위로 x좌표입니다.
 yoriginSrc,  소스 구형의 논리 단위로 y좌표입니다
 wSrc,  소스 사각형의 논리 단위 폭입니다.
 hSrc,  소스 사각형의 논리 단위 높이입니다.
 ftn  BLENDFUNCTION 및 EMRALPHABLEND 구조체를 입력합니다.
 (* 해당 부분의 자세한 내용은 MSDN 을 참고하여 주시길 바랍니다.) 

 

MSDN에 따르면 마지막 매개 변수에 2가지의 알파 블랜드값에 관한 구조체를 지정할 수 있다고 합니다.

여기서는 BLENDFUNCTION를 사용하도록 하겠습니다.

 

BLENDFUNCTION structure

: 대상 비트맵에 대해 블랜딩 기능을 지정하는 구조체입니다.

 

 typedef struct _BLENDFUNCTION {
BYTE BlendOp; BYTE BlendFlags; BYTE SourceConstantAlpha; BYTE AlphaFormat; } BLENDFUNCTION, *PBLENDFUNCTION, *LPBLENDFUNCTION;

 

 의미  매개 변수 
 BlendOp  AC_SRC_OVER에 정의된 블렌딩 동작입니다.
 (자세한 부분은 MSDN 사이트를 참고해주세요.)
 BlendFlags  해당 값은 항상 0이어야 합니다.
 SourceConstantAlpha  전체 소스(복사 될) 비트맵에 사용되는 알파 투명도 값을 지정합니다.
 해당 값은 비트맵의 모든 픽셀 알파값에 적용됩니다.
 해당 값을 설정하면, 이미지 픽셀이 투명 처리될것으로 간주됩니다.
 해당 값의 범위는 0~255입니다. (255 불투명)
 AlphaFormat  해당 소스(복사 될) 또는 대상(복사 장소)의 비트맵을 해석하는 방식을
 지정합니다. (자세한 부분은 MSDN 사이트를 참고해주세요)

 

위 매게 변수에서 AlphaFormat의 값이 AC_SRC_OVER일 경우 비트맵은 32비트여야 합니다.

만약 가지고 있는 비트맵이 24비트일 경우 해당 매개 변수 값을 0으로 해주세요.

 

 

[결과]
반응형