메모리 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:
댓글 달기