我有一個directshow過濾器,用於使用下面的代碼捕獲屏幕。DirectShow在捕捉過程中調整大小
首先,我得使用窗口矩形
EnumWindows
這給了我LPRECT
HDC hMemDC;
HBITMAP hBitmap, hOldBitmap;
int nX, nY, nX2, nY2;
int nWidth, nHeight;
if (IsRectEmpty(lpRect))
return NULL;
hMemDC = CreateCompatibleDC(hScrDC);
nX = lpRect->left;
nY = lpRect->top;
nX2 = lpRect->right;
nY2 = lpRect->bottom;
nWidth = nX2 - nX;
nHeight = nY2 - nY;
hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
hOldBitmap = (HBITMAP) SelectObject(hMemDC, hBitmap);
BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, nX, nY, SRCCOPY);
hBitmap = (HBITMAP) SelectObject(hMemDC, hOldBitmap);
GetDIBits(hScrDC, hRawBitmap, 0, nHeightScanLines, pData, pHeader, DIB_RGB_COLORS);
DeleteDC(hMemDC);
問題是,當我調整我試圖捕獲的窗口,它應該是這樣的
然而它像這樣結束
我有一種感覺,這是由於圖像寬度的像素數量,但我不確定如何調整directshow過濾器的輸出寬度和高度?
您可以分享實際調整大小的代碼和執行渲染的代碼嗎?某處看起來「俯仰」變量被忽略。 – selbie
上面的代碼是我用來做渲染的(在FillBuffer方法中)。對於調整大小,我實際上只是將lpRect更改爲窗口的矩形。 – kiwijus
沒錯,但你如何將這些位保存到文件和/或渲染到屏幕?我懷疑你的問題在那裏。 – selbie