2014-11-28 5 views
-3
GetWindowRect(hWnd, &wnd); 
    hdc = BeginPaint(hWnd, &ps); 
    hdcMem = CreateCompatibleDC(hdc); 

    for (int i = 0; i < n; ++i) 
    { 
     HRGN rgn = CreateRoundRectRgn(0, 0, CARD_WIDTH, CARD_HEIGHT, 7, 7); 
     SetWindowRgn(cards[info[i].card], rgn, TRUE); 
     oldBitmap = SelectObject(hdcMem, cards[info[i].card]); 
     GetObject(cards[info[i].card], sizeof(bitmap), &bitmap); 
     BitBlt(hdc, info[i].pos.x, info[i].pos.y, bitmap.bmWidth, bitmap.bmHeight, hdcMem, 0, 0, SRCCOPY); 
     SelectObject(hdcMem, oldBitmap); 
    } 

У меня проблема с угловыми углами для растрового изображения.Растровое изображение с закругленными углами

+0

'SetWindowRgn' применяет область к окну (ключ в имени), а не растровое изображение. –

+0

Но мне нужно вырезать растровое изображение. – user2962433

+3

Возможно, вы ищете 'SelectClipRgn'? –

ответ

1
GetWindowRect(hWnd, &wnd); 
     hdc = BeginPaint(hWnd, &ps); 
     hdcMem = CreateCompatibleDC(hdc); 
     for (int i = 0; i < n; ++i) 
     { 
      HRGN rgn = CreateRoundRectRgn(info[i].pos.x, info[i].pos.y, info[i].pos.x + CARD_WIDTH, info[i].pos.y + CARD_HEIGHT, 7, 7); 
      SelectClipRgn(hdc, rgn); 
      oldBitmap = SelectObject(hdcMem, cards[info[i].card]); 
      GetObject(cards[info[i].card], sizeof(bitmap), &bitmap); 
      BitBlt(hdc, info[i].pos.x, info[i].pos.y, bitmap.bmWidth, bitmap.bmHeight, hdcMem, 0, 0, SRCCOPY); 
      SelectObject(hdcMem, oldBitmap); 
     } 

Благодаря Джонатану Поттеру.

+2

Не забудьте удалить свой регион ('SelectClipRgn' делает копию) –