Bagikan melalui


Metode IMediaDet::GetBitmapBits

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Pengambilan Audio/Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine , dan Pengambilan Audio/Video di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Catatan

[Tidak digunakan lagi. API ini bisa dihapus dari rilis Windows mendatang.]

 

Metode mengambil GetBitmapBits bingkai video pada waktu media yang ditentukan. Bingkai yang dikembalikan selalu dalam format RGB 24-bit.

Sintaks

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

Parameter

StreamTime

Waktu untuk mengambil bingkai video, dalam hitung detik.

pBufferSize

Menerima ukuran buffer yang diperlukan. Jika pBufferNULL, variabel menerima ukuran buffer yang diperlukan untuk mengambil bingkai. Jika pBuffer bukan NULL, parameter ini diabaikan.

pBuffer

Pointer ke buffer yang menerima struktur BITMAPINFOHEADER diikuti oleh bit DIB.

Lebar

Lebar gambar video, dalam piksel.

Tinggi

Tinggi gambar video, dalam piksel.

Mengembalikan nilai

Mengembalikan nilai HRESULT . Nilai yang mungkin termasuk yang berikut ini:

Menampilkan kode Deskripsi
S_OK
Berhasil.
E_NOINTERFACE
Tidak dapat menambahkan filter Sampel Grabber ke grafik.
E_OUTOFMEMORY
Memori tidak cukup.
E_POINTER
Kesalahan penunjuk NULL.
E_UNEXPECTED
Kesalahan tak terduga.
VFW_E_INVALIDMEDIATYPE
Tipe media tidak valid.

 

Keterangan

Sebelum memanggil metode ini, atur nama file dan streaming dengan memanggil IMediaDet::p ut_Filename dan IMediaDet::p ut_CurrentStream.

Untuk menentukan ukuran buffer yang diperlukan, panggil metode ini dengan pBuffer sama dengan NULL. Ukuran dikembalikan dalam variabel yang diacu oleh pBufferSize. Kemudian buat buffer dan panggil metode lagi, dengan pBuffer sama dengan alamat buffer. Ketika metode kembali, buffer berisi struktur BITMAPINFOHEADER diikuti oleh bitmap. Bitmap diskalakan ke dimensi yang ditentukan dalam parameter Lebar dan Tinggi .

Metode ini menempatkan detektor media ke dalam mode ambil bitmap. Setelah metode ini dipanggil, berbagai metode informasi aliran di IMediaDet tidak berfungsi, kecuali Anda membuat instans baru detektor media.

Catatan

File header Qedit.h tidak kompatibel dengan header Direct3D yang lebih baru dari versi 7.

 

Catatan

Untuk mendapatkan Qedit.h, unduh Microsoft Windows SDK Update untuk Windows Vista dan .NET Framework 3.0. Qedit.h tidak tersedia di Microsoft Windows SDK untuk Windows 7 dan .NET Framework 3.5 Service Pack 1.

 

Contoh

Kode berikut menggunakan GetBitmapBits metode untuk membuat bitmap independen perangkat.

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

Persyaratan

Persyaratan Nilai
Header
Qedit.h
Pustaka
Strmiids.lib

Lihat juga

Antarmuka IMediaDet

Kode Kesalahan dan Keberhasilan