Méthode IMediaDet::GetBitmapBits

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La capture audio/vidéo dans Media Foundation au lieu de DirectShow, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Notes

[Déconseillé. Cette API peut être supprimée des versions ultérieures de Windows.]

 

La GetBitmapBits méthode récupère une image vidéo à l’heure du média spécifiée. Le cadre retourné est toujours au format RVB 24 bits.

Syntaxe

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

Paramètres

StreamTime

Heure à laquelle récupérer l’image vidéo, en secondes.

pBufferSize

Reçoit la taille de mémoire tampon requise. Si pBuffer a la valeur NULL, la variable reçoit la taille de la mémoire tampon nécessaire pour récupérer le cadre. Si pBuffer n’a pas la valeur NULL, ce paramètre est ignoré.

pBuffer

Pointeur vers une mémoire tampon qui reçoit une structure BITMAPINFOHEADER suivie des bits DIB.

Width

Largeur de l’image vidéo, en pixels.

Height

Hauteur de l’image vidéo, en pixels.

Valeur renvoyée

Retourne une valeur HRESULT . Il peut prendre les valeurs suivantes :

Code de retour Description
S_OK
Opération réussie.
E_NOINTERFACE
Impossible d’ajouter le filtre Sample Grabber au graphique.
E_OUTOFMEMORY
Mémoire insuffisante.
E_POINTER
Erreur de pointeur NULL.
E_UNEXPECTED
Erreur inattendue.
VFW_E_INVALIDMEDIATYPE
Type de média non valide.

 

Notes

Avant d’appeler cette méthode, définissez le nom du fichier et le flux en appelant IMediaDet::p ut_Filename et IMediaDet::p ut_CurrentStream.

Pour déterminer la taille de la mémoire tampon requise, appelez cette méthode avec pBuffer égal à NULL. La taille est retournée dans la variable pointée vers par pBufferSize. Ensuite, créez la mémoire tampon et appelez à nouveau la méthode, avec pBuffer égal à l’adresse de la mémoire tampon. Lorsque la méthode retourne, la mémoire tampon contient une structure BITMAPINFOHEADER suivie de la bitmap. La bitmap est mise à l’échelle selon les dimensions spécifiées dans les paramètres Width et Height .

Cette méthode place le détecteur multimédia en mode de saisie bitmap. Une fois cette méthode appelée, les différentes méthodes d’informations de flux dans IMediaDet ne fonctionnent pas, sauf si vous créez une nouvelle instance du détecteur multimédia.

Notes

Le fichier d’en-tête Qedit.h n’est pas compatible avec les en-têtes Direct3D ultérieurs à la version 7.

 

Notes

Pour obtenir Qedit.h, téléchargez la mise à jour Microsoft Windows SDK pour Windows Vista et .NET Framework 3.0. Qedit.h n’est pas disponible dans le Microsoft Windows SDK pour Windows 7 et .NET Framework 3.5 Service Pack 1.

 

Exemples

Le code suivant utilise la GetBitmapBits méthode pour créer une bitmap indépendante de l’appareil.

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;
}

Configuration requise

Condition requise Valeur
En-tête
Qedit.h
Bibliothèque
Strmiids.lib

Voir aussi

IMediaDet Interface

Codes d’erreur et de réussite