Существует HBITMAP, который может быть успешно отображен. Я хочу получить часть (заданную rect) растрового изображения, так что это следующий код, но возвращаемое растровое изображение всегда черное. Что-то не так с кодом? Благодарю.Получите указанную часть hbitmap.
HBITMAP GetSelectedBitmap(HBITMAP p_bitmap, int x, int y, int width, int height){
HDC l_srcDc = ::CreateCompatibleDC(NULL);
::SelectObject(l_srcDc, p_bitmap);
HDC l_dstDc = ::CreateCompatibleDC(l_srcDc);
HBITMAP l_newBitmap = CreateCompatibleBitmap(l_dstDc, width, height);
HBITMAP l_oldBitmap = (HBITMAP)::SelectObject(l_dstDc, l_newBitmap);
ASSERT(0 != ::BitBlt(l_dstDc, 0, 0, width, height, l_srcDc, x, y, SRCCOPY));
HBITMAP l_clippedBitmap = (HBITMAP)::SelectObject(l_dstDc, l_oldBitmap);
::DeleteDC(l_srcDc);
::DeleteDC(l_dstDc);
return l_clippedBitmap;}
Является ли исходное растровое изображение DDB или DIB? Возвращает ли 'SelectObject()' NULL при выборе растрового изображения в исходный HDC? Вы также не сохраняете и не восстанавливаете исходное растровое изображение исходного HDC, прежде чем уничтожить HDC. –
Размещение 'BitBlt' внутри макроса' ASSERT' будет компилироваться в no-op в выпуске сборки. – IInspectable