Kelas CDrawImage

[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.]

Kelas CDrawImage adalah kelas pembantu yang mengelola gambar untuk filter perender video. Semua operasi menggambar dilakukan menggunakan GDI. Kelas ini tidak memberikan dukungan apa pun untuk penyajian dengan DirectDraw. Kelas CDrawImage mengharuskan filter pemilik juga menggunakan kelas CBaseWindow , yang mengelola jendela video. CDrawImage Konstruktor mengambil pointer ke objek CBaseWindow.

Diagram berikut menunjukkan cara yang disukai untuk menggunakan kelas ini dalam filter perender video kustom.

perender video kustom menggunakan cdrawimage

Untuk menggunakan kelas ini, lakukan hal berikut:

Alokator

Filter yang ditampilkan dalam diagram sebelumnya menggunakan kelas alokator kustom, CImageAllocator. Alokator ini membuat DIB dalam memori bersama, menggunakan fungsi GDI CreateDIBSection . Sampel yang dibuat oleh alokator adalah objek CImageSample .

Jika filter memiliki alokator untuk koneksi, sampel media dijamin sebagai objek CImageSample . Dalam hal ini, objek CDrawImage dapat mengoptimalkan gambar dengan menggunakan BitBlt atau StretchBlt. Jika tidak, ini harus menggunakan fungsi SetDIBitsToDevice atau StretchDIBits yang lebih lambat. Opsi yang lebih cepat diimplementasikan oleh metode CDrawImage::FastRender , opsi yang lebih lambat dengan metode CDrawImage::SlowRender . (Terlepas dari namanya, Anda mungkin tidak akan melihat hit performa besar di SlowRender, terutama pada perangkat keras yang lebih baru.)

Palet

Jika metode FastRender digunakan untuk menggambar dan gambar dipalettisasi, maka filter perlu mengelola palet, sebagai berikut:

  • Kelas CImageSample berisi nomor versi palet, yang disimpan dalam struktur DIBDATA . Nilai diinisialisasi ketika alokator membuat sampel.
  • Kelas CDrawImage juga berisi nomor versi palet, yang diinisialisasi pada pembuatan.
  • Setiap kali jenis media berubah menjadi format palettisasi baru, panggil CDrawImage::IncrementPaletteVersion. Metode ini menaikkan nomor versi palet objek CDrawImage . Jika filter menggunakan kelas CImagePalette untuk mengelola informasi palet, Anda cukup memanggil CImagePalette::P reparePalette setiap kali jenis media berubah. Metode PreparePalette menaikkan versi palet hanya jika perlu.
  • Metode FastRender membandingkan versi palet CDrawImage dengan versi palet sampel. Jika nomor versi sampel tertinggal di belakang nomor versi CDrawImage , metode FastRender memanggil CDrawImage::UpdateColourTable. Metode UpdateColourTable mengatur tabel warna dalam konteks perangkat, menggunakan fungsi GDI SetDIBColorTable . Selain itu, versi palet pada sampel diperbarui ke nomor versi saat ini.
  • Jika pin tersambung kembali, filter harus memanggil CDrawImage::ResetPaletteVersion untuk mengatur ulang versi palet. Pada koneksi ulang pin, alokator mengalokasikan ulang semua sampel.
Variabel Anggota yang Dilindungi Deskripsi
m_bStretch Menunjukkan apakah gambar video harus direntangkan agar pas dengan jendela tujuan.
m_bUsingImageAllocator Menunjukkan apakah alokator untuk koneksi pin adalah objek CImageAllocator .
m_EndSample Menentukan waktu berhenti dari sampel terbaru.
m_hdc Tangani konteks perangkat dari jendela pemilik.
m_MemoryDC Tangani konteks perangkat memori dari jendela pemilik.
m_PaletteVersion Digunakan untuk melacak kapan palet berubah.
m_pBaseWindow Arahkan ke objek CBaseWindow pemilik.
m_pMediaType Arahkan ke tipe media saat ini.
m_SourceRect Menentukan persegi sumber untuk gambar.
m_StartSample Menentukan waktu mulai sampel terbaru.
m_TargetRect Menentukan persegi target untuk menggambar.
Metode yang Dilindungi Deskripsi
DisplaySampleTimes Menggambar stempel waktu sampel media di atas gambar video.
FastRender Menggambar gambar video menggunakan fungsi BitBlt atau StretchBlt .
SetStretchMode Menghitung apakah gambar video harus direntangkan.
SlowRender Menggambar gambar video menggunakan fungsi SetDIBitsToDevice atau StretchDIBits .
UpdateColourTable Updates tabel warna dengan palet baru.
Metode Publik Deskripsi
CDrawImage Metode konstruktor.
DrawImage Menggambar bingkai video di jendela video.
DrawVideoImageHere Menggambar gambar dari sampel media ke konteks perangkat tertentu.
GetPaletteVersion Mengambil versi palet.
GetSourceRect Mengambil persegi panjang sumber saat ini.
GetTargetRect Mengambil persegi panjang tujuan saat ini.
IncrementPaletteVersion Menaikkan versi palet.
NotifyAllocator CDrawImage Menginformasikan objek apakah alokator untuk koneksi adalah objek CImageAllocator.
NotifyEndDraw Tidak didukung.
NotifyMediaType Memberi tahu objek tipe media saat ini.
NotifyStartDraw Tidak didukung.
ResetPaletteVersion Mengatur ulang versi palet.
ScaleSourceRect Menskalakan persegi panjang sumber tertentu, jika ada perbedaan antara ukuran video asli dan format jenis media. Virtual.
SetDrawContext Mengatur konteks perangkat yang digunakan untuk menggambar.
SetSourceRect Mengatur persegi sumber.
SetTargetRect Mengatur persegi target.
MenggunakanImageAllocator Menunjukkan apakah alokator saat ini adalah objek CImageAllocator .

Persyaratan

Persyaratan Nilai
Header
Winutil.h (termasuk Streams.h)
Pustaka
Strmbase.lib (build ritel);
Strmbasd.lib (build debug)