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
-
필요한 버퍼 크기를 받습니다. pBuffer가 NULL인 경우 변수는 프레임을 검색하는 데 필요한 버퍼의 크기를 받습니다. pBuffer가 NULL이 아니면 이 매개 변수는 무시됩니다.
-
pBuffer
-
BITMAPINFOHEADER 구조와 DIB 비트를 수신하는 버퍼에 대한 포인터입니다.
-
Width
-
비디오 이미지의 너비(픽셀)입니다.
-
높이
-
비디오 이미지의 높이(픽셀)입니다.
반환 값
HRESULT 값을 반환합니다. 가능한 값은 다음과 같습니다.
반환 코드 | Description |
---|---|
|
성공. |
|
그래프에 샘플 그래버 필터를 추가할 수 없습니다. |
|
메모리가 부족합니다. |
|
NULL 포인터 오류입니다. |
|
예기치 않은 오류입니다. |
|
미디어 유형이 잘못되었습니다. |
설명
이 메서드를 호출하기 전에 IMediaDet::p ut_Filename 및 IMediaDet::p ut_CurrentStream을 호출하여 파일 이름과 스트림을 설정합니다.
필요한 버퍼의 크기를 확인하려면 pBuffer 가 NULL과 같은 이 메서드를 호출합니다. 크기는 pBufferSize가 가리키는 변수에 반환됩니다. 그런 다음, 버퍼를 만들고 pBuffer 를 버퍼의 주소와 같게 사용하여 메서드를 다시 호출합니다. 메서드가 반환될 때 버퍼에는 비트맵 뒤에 BITMAPINFOHEADER 구조가 포함됩니다. 비트맵은 Width 및 Height 매개 변수에 지정된 차원으로 크기가 조정됩니다.
이 메서드는 미디어 감지기를 비트맵 잡기 모드로 전환합니다. 이 메서드가 호출되면 미디어 감지기의 새 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;
}
요구 사항
요구 사항 | 값 |
---|---|
헤더 |
|
라이브러리 |
|
추가 정보