//!< <<< 알파값 적용으로 투명하게 >>>
void DrawBitmapAlphaBlend(HINSTANCE hInst, HDC hdc)
{
//!< LoadImage() 함수는 아이콘, 비트맵, 커서등을 읽어들일수 있다.
//!< LoadBitmap()은 비트맵 리소스만 읽어들인다.
HBITMAP hbm = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP3));
//!< DC 객체를 새로 생성하는 함수 CreateCompatibleDC()
//!< 어떤 DC를 생성하느냐?
//!< 인자로 주어진 hdc와 픽셀 포맷이 같은 DC를 생성.
HDC MemDC = CreateCompatibleDC(hdc);
/* SelectObject() 함수는 지정해준 DC가 어떤 객체를 관리할 수 있도록 연결해준다.
-> MemDC 가 객체 hbm 을 관리할수 있도록 연결해준다.
=> 즉 SelectObject() 함수는 어떤 DC가 관리할 수 있는 모든 객체와 해당 DC를 연결해주는 역할을 한다.
여기서 말하는 객체란 DC가 관리할 수 있는 모든 형태. ( Pen, Brush, Bitmap ... )
그런데 만약 MemDC가 이전에 이미 관리하던 객체가 있다면?
원래 객체를 잃어버리지 않도록 임시로 받아둔다. (holdbm)
받아둔 원 객체는 나중에 다시 연결해준다. (복구) */
HBITMAP holdbm = (HBITMAP)SelectObject(MemDC, hbm);
//!<이미지 사이즈 정보 구하기.
BITMAP bm;
GetObject(hbm, sizeof(BITMAP), &bm);
//!< 화면에 뿌려주는 함수.
//!< MemDC 가 화면에 뿌려질 이미지 데이터를 관리하고 있으므로
//!< 화면 픽셀에 뿌려줄 데이터를 MemDC로부터 전달받는다.
//!< 여기서 화면이라는 객체를 관리하는 것 -> hdc
BitBlt( hdc, 0, 250, bm.bmWidth,bm.bmHeight, MemDC, 0,0, SRCCOPY);
BLENDFUNCTION blend;
blend.BlendFlags = 0;
blend.AlphaFormat = AC_SRC_ALPHA;
blend.BlendOp = AC_SRC_OVER;
blend.SourceConstantAlpha = 120;
//!< 설정된 알파값으로 투명하게 만든다.
AlphaBlend(hdc, 0, 0, bm.bmWidth, bm.bmHeight, MemDC, 0, 0, bm.bmWidth, bm.bmHeight, blend);
//!< 다 그렸으면 MemDC 를 원래 상태로 복구한다.
SelectObject(MemDC, holdbm);
//!< 비트맵 이미지 해제.
DeleteObject(hbm);
//!< 생성할때 바로 해제부터 해준다. (습관)
DeleteDC( MemDC);
}
'[ Programing ] > API' 카테고리의 다른 글
고정키와 필터키 막기 (0) | 2011.05.27 |
---|---|
커서 없애기 (0) | 2010.04.19 |
[DDB] StretchBlt() 비트맵 크기 변경해 출력 (0) | 2010.02.04 |
[DDB] BitBlt() 비트맵 출력 (0) | 2010.02.04 |
[DDB] TransparentBlt() 지정 컬러 값 제거 후 출력 (0) | 2010.02.04 |