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.
Untuk menggunakan kelas ini, lakukan hal berikut:
- Saat pin tersambung, panggil metode CDrawImage::NotifyMediaType dan CDrawImage::NotifyAllocator .
- Setiap kali jenis media berubah, panggil NotifyMediaType lagi.
- Sebelum penyajian terjadi, panggil CDrawImage::SetDrawContext.
- Panggil CDrawImage::SetSourceRect jika persegi panjang sumber berubah, dan CDrawImage::SetTargetRect jika persegi panjang target berubah.
- Kelola palet untuk gambar yang diparlettisasi, seperti yang dijelaskan di bagian pada palet yang mengikuti.
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 |
|
Pustaka |
|