我試圖用GDI截圖,然後我在FFmpeg中使用它。 屏幕截圖效果很好,FFmpeg處理它沒有任何問題。GDI截圖,結果在不同的計算機上變化
但是,在某些計算機上,圖像不是我想要的,就像你可以在下面看到的那樣。
下面是我用它來初始化我的位圖代碼:
//--
mImageBuffer = new unsigned char[mWxHxS];
memset(mImageBuffer, 0, mWxHxS);
//--
hScreenDC = GetDC(0);
hMemoryDC = CreateCompatibleDC(hScreenDC);
//--
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bi.bmiHeader.biBitCount = 24;
bi.bmiHeader.biWidth = mWidth;
bi.bmiHeader.biHeight = mHeight;
bi.bmiHeader.biCompression = BI_RGB;
bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biClrUsed = 24;
bi.bmiHeader.biClrImportant = 256;
hBitmap = CreateDIBSection(hMemoryDC, &bi, DIB_RGB_COLORS, &mImageBuffer, 0, 0);
SelectObject(hMemoryDC, hBitmap);
在這裏,每個截圖:
if(BitBlt(
hMemoryDC,
0,
0,
mWidth,
mHeight,
hScreenDC,
mPx,
mPy,
SRCCOPY | CAPTUREBLT
))
我沒有任何錯誤運行我的應用程序,但這個醜陋的圖像,只在一些電腦上。 我不知道在這些計算機上造成的區別是什麼(所有的都是Win7,Aero激活...)。 我不明白,因爲我的代碼按照我發現的所有例子...
請幫幫我!
尋找我就像你只是用rgb而不是rgba。 (只是我想到的第一件事) – AntiHeadshot
對,我只使用rgb頻道,但我明白的是通過設置biClrUsed爲24,BitBlt將rgba轉換爲rgb。此外,在我的電腦上DC返回32位,但圖像是好的,我沒有這個問題。 – Maypeur
你如何計算'mWxHxS'值? –