다음을 통해 공유


IMediaDet::GetBitmapBits 메서드

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

참고

[더 이상 사용되지 않습니다. 이 API는 이후 Windows 릴리스에서 제거될 수 있습니다.]

 

메서드는 GetBitmapBits 지정된 미디어 시간에 비디오 프레임을 검색합니다. 반환된 프레임은 항상 24비트 RGB 형식입니다.

구문

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

매개 변수

StreamTime

비디오 프레임을 검색할 시간(초)입니다.

pBufferSize

필요한 버퍼 크기를 받습니다. pBufferNULL인 경우 변수는 프레임을 검색하는 데 필요한 버퍼의 크기를 받습니다. pBufferNULL이 아니면 이 매개 변수는 무시됩니다.

pBuffer

BITMAPINFOHEADER 구조와 DIB 비트를 수신하는 버퍼에 대한 포인터입니다.

Width

비디오 이미지의 너비(픽셀)입니다.

높이

비디오 이미지의 높이(픽셀)입니다.

반환 값

HRESULT 값을 반환합니다. 가능한 값은 다음과 같습니다.

반환 코드 Description
S_OK
성공.
E_NOINTERFACE
그래프에 샘플 그래버 필터를 추가할 수 없습니다.
E_OUTOFMEMORY
메모리가 부족합니다.
E_POINTER
NULL 포인터 오류입니다.
E_UNEXPECTED
예기치 않은 오류입니다.
VFW_E_INVALIDMEDIATYPE
미디어 유형이 잘못되었습니다.

 

설명

이 메서드를 호출하기 전에 IMediaDet::p ut_FilenameIMediaDet::p ut_CurrentStream을 호출하여 파일 이름과 스트림을 설정합니다.

필요한 버퍼의 크기를 확인하려면 pBufferNULL과 같은 이 메서드를 호출합니다. 크기는 pBufferSize가 가리키는 변수에 반환됩니다. 그런 다음, 버퍼를 만들고 pBuffer 를 버퍼의 주소와 같게 사용하여 메서드를 다시 호출합니다. 메서드가 반환될 때 버퍼에는 비트맵 뒤에 BITMAPINFOHEADER 구조가 포함됩니다. 비트맵은 WidthHeight 매개 변수에 지정된 차원으로 크기가 조정됩니다.

이 메서드는 미디어 감지기를 비트맵 잡기 모드로 전환합니다. 이 메서드가 호출되면 미디어 감지기의 새 instance 만들지 않으면 IMediaDet의 다양한 스트림 정보 메서드가 작동하지 않습니다.

참고

헤더 파일 Qedit.h는 버전 7 이후의 Direct3D 헤더와 호환되지 않습니다.

 

참고

Qedit.h를 얻으려면 Windows Vista용 Microsoft Windows SDK 업데이트를 다운로드하고 3.0을 .NET Framework. Qedit.h는 Windows 7 및 .NET Framework 3.5 서비스 팩 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;
}

요구 사항

요구 사항
헤더
Qedit.h
라이브러리
Strmiids.lib

추가 정보

IMediaDet 인터페이스

오류 및 성공 코드