투명 비트 맵 표시

   http://hi.baidu.com/tit_wangpeng/blog/item/1092d7d77a11aed1a144df8e.html 
BOOL TransparentBlt(
HDC hdcDest,      //   DC
int nXOriginDest,   //   X  
int nYOriginDest,   //   Y  
int nWidthDest,     //     
int hHeightDest,    //     
HDC hdcSrc,         //  DC
int nXOriginSrc,    //  X  
int nYOriginSrc,    //  Y  
int nWidthSrc,      //    
int nHeightSrc,     //    
UINT crTransparent  //    ,COLORREF  
);

투명 한 색 의 비트 맵 을 포함 하 는 그리 기 방법 은 여러 가지 가 있 습 니 다.가장 간단 한 방법 은 기 존의 함 수 를 호출 하 는 것 입 니 다.Transparent Blt 도 자신의 코드 를 통 해 Transparent Blt 와 유사 한 기능 을 실현 할 수 있 고 실현 과정 도 두 가지 형식 이 있 습 니 다.하 나 는 미리 마스크 비트 맵 을 만 드 는 것 이 고 다른 하 나 는 동적 으로 마스크 비트 맵 을 만 드 는 것 입 니 다.본 고 는 동적 으로 마스크 비트 맵 을 생 성하 여 투명 한 영역 비트 맵 을 그 리 는 방법 을 소개 할 것 이다.
1.Transparent Blt 함수 의 사용
Transparent Blt 함 수 는 윈도 98/윈도 2000 이상 버 전에 서 실 행 됩 니 다.시스템 에 Msimg32.dll 이 포함 되 어 있어 야 합 니 다.사용 시 Msimg32.lib 를 연결 할 수 있 습 니 다.
윈도 98 의 Transparent Blt 는 자원 유출 이 발생 하기 때문에 WIN 98 에서 이 함 수 를 사용 하 는 것 을 권장 하지 않 습 니 다.
TransparentBlt 함수 원형 은 다음 과 같 습 니 다.
 使用示例: 
 
CBitmap FootballBMP;
FootballBMP.LoadBitmap(IDB_FOOTBALLBMP);
CDC ImageDC;
ImageDC.CreateCompatibleDC(pDC);
CBitmap *pOldImageBMP = ImageDC.SelectObject(&FootballBMP);
TransparentBlt(pDC->m_hDC, 0, 0, 218, 199, ImageDC.m_hDC, 0, 0, 218, 199, RGB(0,0,0xff));
ImageDC.SelectObject(pOldImageBMP);

2.투명 성 Blt 함수 실현
투명 한 색 비트 맵 을 그 리 는 과정 을 이해 하기 위해 투명 한 색 비트 맵 기능 과 일치 하 는 실험 함 수 를 직접 만들어 투명 한 색 비트 맵 2 라 고 합 니 다.
실험 소재:두 장의 비트 맵 이 있 습 니 다.bk.bmp 는 배경 비트 맵 입 니 다.football.bmp 는 투명 구역 을 포함 하고 투명 색 은 파란색 RGB(0,0,0xff)입 니 다.
실험 목적:bk.bmp 를 배경 으로 football.bmp 를 배경 으로 다음 과 같은 최종 효과 도 를 형성 합 니 다.
2.1 투명 비트 맵 그리 기 원리
football.bmp->HBITMAP hImageBMP 불 러 오기->HDC hImageDC 선택
2.1.1 축구 의 단색 마스크 비트 맵 을 생 성 하고 투명 구역 은 흰색(전체 1)이 며 불투명 구역 은 검은색(전체 0)이다.
4.567913.이렇게 축구 비트 맵 에서 파란색 구역 은 마스크 비트 맵 에서 흰색 이 되 었 고 다른 구역 은 검은색 이 되 었 다.이때 hMaskBMP 는 다음 과 같다.
(그림 1)
2.1.2 배경 색 은 검은색 이 고 전경 색 은 흰색 이 며 마스크 비트 맵(그림 1)과 축구 비트 맵 을'와'로 설정 합 니 다.
HBITMAP hMaskBMP = CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL); //       
SetBkColor(hImageDC, RGB(0,0,0xff)); //         
BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY); //    hMaskDC
이렇게 마스크 비트 맵 의 배경 색(검은색)구역 은 hImageBMP 에서 보존 되 고 전경 색(흰색)부분 은 검은색 으로 변 합 니 다.이때 hImageBMP 는 다음 그림 과 같 습 니 다.
(그림 2)
2.1.3 배경 색 을 흰색 으로 설정 하고 전경 색 을 검은색 으로 설정 하 며 마스크 비트 맵(그림 1)과 배경 을'와'연산 합 니 다.
4.567913.마스크 에서 흰색 구역(데이터 와 1 의'결과 가 변 하지 않 음)은 배경 을 변 하지 않 게 하고 검은색 구역 은 검은색 으로 변 합 니 다.이때 배경 은 다음 과 같 습 니 다.
(그림 3)
2.1.4 hImageBMP(그림 2)와 배경(그림 3)을'또는'연산
이렇게 해서 축 구 를 배경 에 그 렸 다.
2.2 TransparentBlt 2 함수 구현 코드
SetBkColor(hImageDC, RGB(0,0,0));
SetTextColor(hImageDC, RGB(255,255,255));
BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);

설명:본 고 에서 제공 하 는 Transparent Blt 2 함 수 는 투명 비트 맵 의 디 스 플레이 원 리 를 설명 하 는 데 목적 을 두 고 있 으 며,윈도 2000 이상 환경 실제 운용 에서 기 존의 Transparent Blt 함 수 를 사용 하여 투명 비트 맵 을 그 리 는 것 을 권장 합 니 다.

좋은 웹페이지 즐겨찾기