我有一个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