메모리 DC의 비트맵을 픽셀단위로 출력하되 하얀색은 투명하게 처리하는 방법에 대해 질문드립니다.
글쓴이: mydream / 작성시간: 목, 2015/08/27 - 7:31오후
WM_PAINT 메시지 부분에서 TransparentBitBlt 함수가 투명한 색상을 제대로 처리하지 못해서 픽셀단위로 색상을 대응되는 화면 DC에 출력하려고 다음과 같이 WM_PAINT 부분을 작성했습니다.
case WM_PAINT:
{
PAINTSTRUCT pst;
HDC hdc=BeginPaint(hwnd, &pst);
//hdc=BeginPaint(hwnd, &pst);
HBITMAP backupbitmap;
HDC memDC=CreateCompatibleDC(hdc);
BITMAP bitinfo;
for(long x=afterimage.left;x<=afterimage.right;x++) {
for(long y=afterimage.top;y<=afterimage.bottom;y++) {
SetPixel(hdc, x, y, 0xffffff);
}
}
backupbitmap=(HBITMAP)SelectObject(memDC, bricks[brick_type][status]);
GetObject(bricks[brick_type][status], sizeof(BITMAP), &bitinfo);
COLORREF brick_pixel, display_pixel;
for(int i=0;i<bitinfo.bmHeight;i++) {
for(int j=0;j<bitinfo.bmWidth;j++) {
brick_pixel=(COLORREF)GetPixel(memDC, j, i);
display_pixel=GetPixel(hdc, pos.x*MOVECELL+j, pos.y*MOVECELL+i );
if( ((COLORREF)brick_pixel)!=((COLORREF)0xffffff) ) {//trouble
//여기 if문에서 햐얀색을 출력하지 않고 건너띄도록 했는데 하얀색을 계속 출력합니다.
SetPixel(hdc, pos.x*MOVECELL+j, pos.y*MOVECELL+i, brick_pixel);
}
}
}
SelectObject(memDC, backupbitmap);
DeleteDC(memDC);
EndPaint(hwnd, &pst);
}
return 0;하얀색을 투명하게 처리하기 위해서 아예 비트맵이 출력되지 않도록 조건을 주어 화면 DC에 출력되지 않도록 했는데 하얀색이 출력되어 뒤의 이미지를 가려버립니다. 뒤의 이미지가 가려지면 안되는데요. 조건문에서 왜 필터링이 되지 않나요?
Forums:


댓글 달기