IMediaDet::GetBitmapBits 方法
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]
注意
[已被取代。 此 API 可能會從未來的 Windows 版本中移除。]
方法 GetBitmapBits
會在指定的媒體時間擷取視訊畫面。 傳回的框架一律為 24 位 RGB 格式。
語法
HRESULT GetBitmapBits(
double StreamTime,
long *pBufferSize,
char *pBuffer,
long Width,
long Height
);
參數
-
StreamTime
-
擷取視訊畫面的時間,以秒為單位。
-
pBufferSize
-
接收所需的緩衝區大小。 如果 pBuffer 為 Null,變數會收到擷取框架所需的緩衝區大小。 如果 pBuffer 不是 Null,則會忽略此參數。
-
pBuffer
-
接收 BITMAPINFOHEADER 結構的緩衝區指標,後面接著 DIB 位。
-
寬度
-
視訊影像的寬度,以圖元為單位。
-
高度
-
視訊影像的高度,以圖元為單位。
傳回值
傳回 HRESULT 值。 可能的值如下:
傳回碼 | 描述 |
---|---|
|
成功。 |
|
無法將 範例擷取器 篩選新增至圖形。 |
|
記憶體不足。 |
|
Null 指標錯誤。 |
|
非預期的錯誤。 |
|
不正確媒體類型。 |
備註
呼叫此方法之前,請先呼叫 IMediaDet::p ut_Filename 和 IMediaDet::p ut_CurrentStream來設定檔案名和資料流程。
若要判斷所需的緩衝區大小,請使用 pBuffer 等於 Null呼叫這個方法。 大小會在 pBufferSize所指向的變數中傳回。 然後建立緩衝區,然後再次呼叫 方法,並將 pBuffer 等於緩衝區的位址。 當方法傳回時,緩衝區會包含 BITMAPINFOHEADER 結構,後面接著點陣圖。 點陣圖會縮放至 Width 和 Height 參數中指定的維度。
這個方法會將媒體偵測器放入點陣圖抓取模式。 呼叫此方法之後,除非建立媒體偵測器的新實例, 否則 IMediaDet 中的各種串流資訊方法無法運作。
注意
標頭檔 Qedit.h 與 7 版之後的 Direct3D 標頭不相容。
注意
若要取得 Qedit.h,請下載適用于 Windows Vista 的 Microsoft Windows SDK Update 和 .NET Framework 3.0。 Windows 7 和 .NET Framework 3.5 Service Pack 1 Microsoft Windows SDK中無法使用 Qedit.h。
範例
下列程式碼會 GetBitmapBits
使用 方法來建立與裝置無關的點陣圖。
long size;
hr = pDet->GetBitmapBits(0, &size, 0, width, height);
if (SUCCEEDED(hr))
{
char *pBuffer = new char[size];
if (!pBuffer)
return E_OUTOFMEMORY;
try {
hr = pDet->GetBitmapBits(0, 0, pBuffer, width, height);
}
catch (...) {
delete [] pBuffer;
throw;
}
if (SUCCEEDED(hr))
{
BITMAPINFOHEADER *bmih = (BITMAPINFOHEADER*)pBuffer;
HDC hdcDest = GetDC(0);
// Find the address of the start of the image data.
void *pData = pBuffer + sizeof(BITMAPINFOHEADER);
// Note: In general a BITMAPINFOHEADER can include extra color
// information at the end, so calculating the offset to the image
// data is not generally correct. However, the IMediaDet interface
// always returns an RGB-24 image with no extra color information.
BITMAPINFO bmi;
ZeroMemory(&bmi, sizeof(BITMAPINFO));
CopyMemory(&(bmi.bmiHeader), bmih, sizeof(BITMAPINFOHEADER));
HBITMAP hBitmap = CreateDIBitmap(hdcDest, bmih, CBM_INIT,
pData, &bmi, DIB_RGB_COLORS);
}
delete[] pBuffer;
}
規格需求
需求 | 值 |
---|---|
標頭 |
|
程式庫 |
|
另請參閱