다음은 매우 중요한 TransparentBlt() , AlphaBlend()  함수들의 사용법이다.
투명처리를 해준다. 인터페이스 개발시에 자주 쓰인다.

TransparentBlt()  사용법

dc.TransparentBlt(20,100, bmpInfo.bmWidth * 2 , bmpInfo.bmHeight * 2, &MemDC, 0,0, bmpInfo.bmWidth, bmpInfo.bmHeight, RGB(0,0,0)); //마지막 인자는 투명 처리될 색상의 RGB 값이다.


AlphaBlend() 사용법

BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER; //원본이미지와 대상 이미지를 서로 섞는다는 의미.
bf.BlendFlags = 0; //항상 반드시 0 이어야 한다.
bf.SourceConstantAlpha = 50; //0은 투명 255는 불투명

bf.AlphaFormat = 0; //이 값은 항상 0이거나 AC_SRC_ALPHA 가 되어야 한다.

//AC_SRC_ALPHA 가 되는 경우는 원본 비트맵이 24비트 이하의 비트맵이 아닌 각 픽셀에 대한 알파 채널을 갖는 진정한 32비트 비트맵인 경우만 해당한다. 이런 경우 복잡한 연산 대신 알파 채널을 이용한 별도의 연산으로 이미지를 혼합하게 되며, 이미지 전체의 투명도를 적용하여 출력하지 않고 일부는 불투명하게,일부는 투명하게 출력할 수 있다.
보통 바탕화면에 아이콘이 이렇게 적용되어 있다. 배경화면과 아이콘이 섞여서 출력되어 있는..

//반투명 이미지를 출력한다.
dc.AlphaBlend(20,100, bmpInfo.bmWidth*2, bmpInfo.bmHeight*2, &MemDC, 0,0, bmpInfo.bmWidth, bmpInfo.bmHeight, bf);


블랜드연산에 대해서는 나중에 알아보자. 중요한 것은 AlphaBlend() 함수와 BitBlt 함수의 내부 연산 속도는 비교할 수 없을 만큼 차이가 난다는 것이며, AlphaBlend() 함수는 내부적으로 연산 공식에 의해 느려질 수 밖에 없다. 그래서 윈도우 비스타가 XP보다 상대적으로 느려질 수 밖에 없는 이유이다.

'Windows > MFC' 카테고리의 다른 글

윈도우 화면 캡쳐하기  (0) 2011.11.14
CImage 클래스  (0) 2011.11.14
비트맵과 이미지 처리  (0) 2011.11.14
DrawText() 함수 예제 및 연습  (0) 2011.11.13
직접 버튼 그리기  (0) 2011.11.13

+ Recent posts