Metodo IMediaDet::GetBitmapBits
[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.
Nota
[Deprecata. Questa API può essere rimossa dalle versioni future di Windows.]
Il GetBitmapBits
metodo recupera un fotogramma video in corrispondenza del tempo multimediale specificato. Il frame restituito è sempre in formato RGB a 24 bit.
Sintassi
HRESULT GetBitmapBits(
double StreamTime,
long *pBufferSize,
char *pBuffer,
long Width,
long Height
);
Parametri
-
StreamTime
-
Tempo in cui recuperare il fotogramma video, in secondi.
-
pBufferSize
-
Riceve le dimensioni del buffer necessarie. Se pBuffer è NULL, la variabile riceve le dimensioni del buffer necessarie per recuperare il frame. Se pBuffer non è NULL, questo parametro viene ignorato.
-
pBuffer
-
Puntatore a un buffer che riceve una struttura BITMAPINFOHEADER seguita dai bit DIB.
-
Width
-
Larghezza dell'immagine video, in pixel.
-
Altezza
-
Altezza dell'immagine video, in pixel.
Valore restituito
Restituisce un valore HRESULT . I possibili valori sono i seguenti:
Codice restituito | Descrizione |
---|---|
|
Operazione completata. |
|
Impossibile aggiungere il filtro Sample Grabber al grafico. |
|
Memoria insufficiente. |
|
Errore del puntatore NULL. |
|
Errore imprevisto. |
|
Tipo di supporto non valido. |
Commenti
Prima di chiamare questo metodo, impostare il nome e il flusso del file chiamando IMediaDet::p ut_Filename e IMediaDet::p ut_CurrentStream.
Per determinare le dimensioni del buffer necessario, chiamare questo metodo con pBuffer uguale a NULL. La dimensione viene restituita nella variabile a cui punta pBufferSize. Creare quindi il buffer e chiamare di nuovo il metodo , con pBuffer uguale all'indirizzo del buffer. Al termine del metodo, il buffer contiene una struttura BITMAPINFOHEADER seguita dalla bitmap. La bitmap viene ridimensionata in base alle dimensioni specificate nei parametri Width e Height .
Questo metodo inserisce il rilevatore multimediale in modalità di afferramento bitmap. Dopo aver chiamato questo metodo, i vari metodi di informazioni sul flusso in IMediaDet non funzionano, a meno che non si crei una nuova istanza del rilevatore multimediale.
Nota
Il file di intestazione Qedit.h non è compatibile con le intestazioni Direct3D successive alla versione 7.
Nota
Per ottenere Qedit.h, scaricare l'aggiornamento Microsoft Windows SDK per Windows Vista e .NET Framework 3.0. Qedit.h non è disponibile nella Microsoft Windows SDK per Windows 7 e .NET Framework 3.5 Service Pack 1.
Esempio
Il codice seguente usa il GetBitmapBits
metodo per creare una bitmap indipendente dal dispositivo.
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;
}
Requisiti
Requisito | Valore |
---|---|
Intestazione |
|
Libreria |
|
Vedi anche