본문 바로가기

Program Languege/WinAPI

TransparentBlt, AlphaBlend, GdiTranslaparentBlt, GdiAlphaBlend

TransparentBlt, AlphaBlend,

GdiTranslaparentBlt, GdiAlphaBlend

 

 

 

TransparentBlt

 

 BOOL TransparentBlt( HDC hdcDest, int xoriginDest, int yoriginDest, int wDest,int hDest,

                                 HDC hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, UINT crTransparent);

 

 일단 msdc에 나와있는 함수의 원형은 위와 같다.

( http://msdn.microsoft.com/en-us/library/windows/desktop/dd145141(v=vs.85).aspx )

 

각 인자를 살펴보자.

 

 - hdcDest : 복사할 대상의 DC 핸들.

 - xoriginDest : 대상의 사각형에서 왼쪽 위의 모서리를 기준으로한 X좌표.

 - yoriginDest : 대상의 사각형에서 왼쪽 위의 모서리를 기준으로한 Y좌표.

 - wDest : 대상의 사각형의 너비.

 - hDest : 대상의 사각형의 높이.

 - hdcSrc : 복사할 원본의 DC 핸들.

 - xoriginSrc : 원본의 사각형에서 왼쪽 위의 모서리를 기준으로한 X좌표.

 - yoriginSrc : 원본의 사각형에서 왼쪽 위의 모서리를 기준으로한 Y좌표.

 - wSrc : 원본의 사각형의 너비.

 - hSrc : 원본의 사각형의 높이.

 - crTransparent : 원본에서 대상으로 복사할 때 투명으로 처리할 RGB 색상.

 

 

 

 

 

 

 

 

 hdcSrc의 내용을 hdcDest에 복사할 때 hdcSrc의 왼쪽 위의 모서리를 기준으로 xoriginSrc와 yoriginSrc만큼 떨어진 지점을 기준으로 wSrc, hSrc만큼 복사하여

hdcDest의 왼쪽 위의 모서리를 기준으로 xoriginDest와 yoriginDest만큼 떨어진 지점부터 wDest, hDest까지의 영역에 복사하는데 이 때 hdcSrc에서 crTransparent에

해당하는 RGB색상은 투명으로 처리하여 복사하는 함수이다.

 

 반환 값은 성공시 TRUE, 실패시 FALSE이며 DDBS 방식의 compatible bitmap에서 동작한다. 모든 비트맵 형식을 지원하지만 32비트(BPP) 비트맵의 경우

알파 값만 복사된다. 이런 경우 AlphaBlend 함수를 사용하여야한다.

 

 Dest와 Src의 크기가 같지 않은 경우 Dest에 맞게 크기가 늘려서 적용된다. Src나 Dest의 너비나 높이 값이 음수가 되면 복사하지 않는다.

 

 TransparentBlt를 사용하려면 msimg32.lib를 추가해야 사용할 수 있다.

 

 첫번째 방법은 다음과 같이 #pragma comment를 사용하여 해당 라이브러리를 추가시키는 방법이다.

 

 

두번째 방법은 프로젝트의 속성 창을 열어서 해당 라이브러리를 추가시키는 방법이다.

 

 

 

 

 

AlphaBlend

 

 BOOL AlphaBlend( HDC hdcDest, int xoriginDest, int yoriginDest, int wDest,int hDest,

                                 HDC hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, BLENDFUNTION ftn);

 

 이 함수도 TransparentBlt와 원형이 거의 흡사하며 마지막 인자만 다르다.

(http://msdn.microsoft.com/en-us/library/windows/desktop/dd183351(v=vs.85).aspx)

 

- ftn : 알파 블렌딩을 적용하기 위한 변수로 BLENDFUNCTION 구조체 타입이다.

 

 

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

 

- BlendOp : 블렌딩 연산자로 AC_SRC_OVER만 정의되어 있습니다.

- BlendFlags : 항상 값을 0으로 해야합니다.

- SourceConstantAlpha : 0 ~ 255까지의 알파 값을 지정합니다.

- AlphaFormat : 32비트인 경우 AC_SRC_ALPHA를 지정하고 그외에는 0을 지정합니다. 그렇지 않으면 AlphaBlend함수는 실패합니다.

 

AlphaBlend함수는 hdcSrc에 투명도를 적용하여 DestDC에 복사하는 함수입니다. 이 함수도 역시 msimg32.lib를 추가해주어야 사용이 가능합니다.

 

 

 

 

 

 

GdiTransparentBlt, GdiAlphaBlend 

 

 BOOL GdiTransparentBlt( HDC hdcDest, int xoriginDest, int yoriginDest, int wDest,int hDest,

                                     HDC hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, UINT crTransparent);

 

http://msdn.microsoft.com/en-us/library/windows/desktop/dd373586(v=vs.85).aspx

 

 

 BOOL GdiAlphaBlend( HDC hdcDest, int xoriginDest, int yoriginDest, int wDest,int hDest,

                                 HDC hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, BLENDFUNTION ftn);

 

http://msdn.microsoft.com/en-us/library/windows/desktop/dd373584(v=vs.85).aspx

 

 

 위의 두 함수는 기존의 TransparentBlt 와 AlphaBlend 함수와 인자와 기능은 동일하다. 차이점이 있다면 msimg32.lib를 추가하지 않아도 windows.h만 포함한다면 사용할 수 있다는 점이 다르다.

 

 

 

출처 : http://msdn.microsoft.com/en-us/library/windows/desktop/dd145141(v=vs.85).aspx

'Program Languege > WinAPI' 카테고리의 다른 글

스레드  (0) 2014.04.29
프로세스  (0) 2014.04.29
QueryPerformance  (0) 2014.04.10
PeekMessage  (0) 2014.04.10
GDI 오브젝트  (0) 2014.04.02