IMediaDet::GetBitmapBits 方法

注意

[已弃用。 可以从Windows的未来版本中删除此 API。

 

该方法 GetBitmapBits 在指定的媒体时间检索视频帧。 返回的帧始终采用 24 位 RGB 格式。

语法

HRESULT GetBitmapBits(
   double StreamTime,
   long   *pBufferSize,
   char   *pBuffer,
   long   Width,
   long   Height
);

参数

StreamTime

检索视频帧的时间(以秒为单位)。

pBufferSize

接收所需的缓冲区大小。 如果 pBufferNULL,则变量接收检索帧所需的缓冲区大小。 如果 pBuffer 不是 NULL,则忽略此参数。

pBuffer

指向接收 BITMAPINFOHEADER 结构的缓冲区的指针,后跟 DIB 位。

Width

视频图像的宽度(以像素为单位)。

Height

视频图像的高度(以像素为单位)。

返回值

返回 HRESULT 值。 可能的值如下所示:

返回代码 说明
S_OK
成功。
E_NOINTERFACE
无法将 示例抓取器 筛选器添加到图形。
E_OUTOFMEMORY
内存不足。
E_POINTER
NULL 指针错误。
E_UNEXPECTED
意外错误。
VFW_E_INVALIDMEDIATYPE
媒体类型无效。

 

注解

在调用此方法之前,请通过调用 IMediaDet::p ut_FilenameIMediaDet::p ut_CurrentStream 来设置文件名和流。

若要确定所需的缓冲区大小,请使用 pBuffer 等于 NULL 调用此方法。 大小在 pBufferSize 指向的变量中返回。 然后创建缓冲区并再次调用方法, pBuffer 等于缓冲区的地址。 方法返回时,缓冲区包含 BITMAPINFOHEADER 结构,后跟位图。 位图缩放为 宽度高度 参数中指定的尺寸。

此方法将媒体检测器置于位图抓取模式。 调用此方法后, IMediaDet 中的各种流信息方法不起作用,除非你创建了媒体检测器的新实例。

注意

头文件 Qedit.h 与版本 7 后面的 Direct3D 标头不兼容。

 

注意

若要获取 Qedit.h,请下载适用于 Windows Vista 和 .NET Framework 3.0 的 Microsoft Windows SDK 更新。 Qedit.h 在 Windows 7 和 .NET Framework 3.5 Service Pack 1 的 Microsoft Windows SDK中不可用。

 

示例

以下代码使用 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;
}

要求

要求 Value
标头
Qedit.h

Strmiids.lib

另请参阅

IMediaDet 接口

错误和成功代码