Classe CDrawImage
[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si 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.]
La CDrawImage
classe est une classe d’assistance qui gère le dessin pour un filtre de convertisseur vidéo. Toutes les opérations de dessin sont effectuées à l’aide de GDI. Cette classe ne prend pas en charge le rendu avec DirectDraw. La CDrawImage
classe nécessite que le filtre propriétaire utilise également la classe CBaseWindow , qui gère la fenêtre vidéo. Le CDrawImage
constructeur prend un pointeur vers l’objet CBaseWindow .
Le diagramme suivant montre la meilleure façon d’utiliser cette classe dans un filtre de convertisseur vidéo personnalisé.
Pour utiliser cette classe, procédez comme suit :
- Lorsque les broches se connectent, appelez les méthodes CDrawImage::NotifyMediaType et CDrawImage::NotifyAllocator .
- Chaque fois que le type de média change, appelez à nouveau NotifyMediaType .
- Avant tout rendu, appelez CDrawImage::SetDrawContext.
- Appelez CDrawImage::SetSourceRect si le rectangle source change, et CDrawImage::SetTargetRect si le rectangle cible change.
- Gérez la palette pour les images palettisées, comme décrit dans la section sur les palettes qui suit.
Allocateurs
Le filtre présenté dans le diagramme précédent utilise une classe d’allocateur personnalisée, CImageAllocator. Cet allocateur crée des DIO dans la mémoire partagée à l’aide de la fonction GDI CreateDIBSection . Les exemples créés par l’allocateur sont des objets CImageSample .
Si le filtre possède l’allocateur pour la connexion, les exemples de média sont garantis comme des objets CImageSample . Dans ce cas, l’objet CDrawImage peut optimiser le dessin à l’aide de BitBlt ou StretchBlt. Sinon, il doit utiliser les fonctions SetDIBitsToDevice ou StretchDIBits plus lentes . L’option plus rapide est implémentée par la méthode CDrawImage::FastRender , l’option la plus lente par la méthode CDrawImage::SlowRender . (Malgré le nom, vous ne verrez probablement pas de performances importantes dans SlowRender, en particulier sur le matériel plus récent.)
Palettes
Si la méthode FastRender est utilisée pour le dessin et que l’image est palettisée, le filtre doit gérer la palette, comme suit :
- La classe CImageSample contient un numéro de version de palette, stocké dans la structure DIBDATA . La valeur est initialisée lorsque l’allocateur crée l’exemple.
- La classe CDrawImage contient également un numéro de version de palette, qui est initialisé lors de la création.
- Chaque fois que le type de média passe à un nouveau format palettisé, appelez CDrawImage::IncrementPaletteVersion. Cette méthode incrémente le numéro de version de la palette de l’objet CDrawImage . Si le filtre utilise la classe CImagePalette pour gérer les informations de palette, vous pouvez simplement appeler CImagePalette::P reparePalette chaque fois que le type de média change. La méthode PreparePalette incrémente la version de la palette uniquement lorsque cela est nécessaire.
- La méthode FastRender compare la version de la palette CDrawImage à la version de la palette de l’exemple. Si le numéro de version de l’exemple est en retard par rapport au numéro de version CDrawImage , la méthode FastRender appelle CDrawImage::UpdateColourTable. La méthode UpdateColourTable définit la table de couleurs dans le contexte de l’appareil, à l’aide de la fonction GDI SetDIBColorTable . En outre, la version de la palette sur l’exemple est mise à jour vers le numéro de version actuel.
- Si l’épingle se reconnecte, le filtre doit appeler CDrawImage::ResetPaletteVersion pour réinitialiser la version de la palette. Lors de la reconnexion d’épingle, l’allocateur réalloue tous les exemples.
Variables de membre protégé | Description |
---|---|
m_bStretch | Indique si l’image vidéo doit être étirée pour s’adapter à la fenêtre de destination. |
m_bUsingImageAllocator | Indique si l’allocateur pour la connexion de broche est un objet CImageAllocator . |
m_EndSample | Spécifie l’heure d’arrêt de l’exemple le plus récent. |
m_hdc | Gérez le contexte de l’appareil de la fenêtre propriétaire. |
m_MemoryDC | Gérez le contexte de périphérique mémoire de la fenêtre propriétaire. |
m_PaletteVersion | Permet de suivre le moment où la palette change. |
m_pBaseWindow | Pointeur vers l’objet CBaseWindow propriétaire. |
m_pMediaType | Pointeur vers le type de média actuel. |
m_SourceRect | Spécifie le rectangle source pour le dessin. |
m_StartSample | Spécifie l’heure de début de l’exemple le plus récent. |
m_TargetRect | Spécifie le rectangle cible pour le dessin. |
Méthodes protégées | Description |
DisplaySampleTimes | Dessine les horodatages d’un exemple de média sur l’image vidéo. |
FastRender | Dessine l’image vidéo à l’aide des fonctions BitBlt ou StretchBlt . |
SetStretchMode | Calcule si l’image vidéo doit être étirée. |
SlowRender | Dessine l’image vidéo à l’aide des fonctions SetDIBitsToDevice ou StretchDIBits . |
UpdateColourTable | Mises à jour la table de couleurs avec une nouvelle palette. |
Méthodes publiques | Description |
CDrawImage | Méthode du constructeur. |
Drawimage | Dessine une image vidéo dans la fenêtre vidéo. |
DrawVideoImageHere | Dessine une image à partir d’un exemple de média dans un contexte d’appareil spécifié. |
GetPaletteVersion | Récupère la version de la palette. |
GetSourceRect | Récupère le rectangle source actuel. |
GetTargetRect | Récupère le rectangle de destination actuel. |
IncrementPaletteVersion | Incrémente la version de la palette. |
NotifyAllocator | Indique à l’objet CDrawImage si l’allocateur de la connexion est un objet CImageAllocator . |
NotifyEndDraw | Non pris en charge. |
NotifyMediaType | Notifie l’objet du type de média actuel. |
NotifyStartDraw | Non pris en charge. |
ResetPaletteVersion | Réinitialise la version de la palette. |
ScaleSourceRect | Met à l’échelle un rectangle source spécifié, s’il existe une différence entre la taille vidéo native et le format du type de média. Virtuel. |
SetDrawContext | Définit les contextes d’appareil utilisés pour le dessin. |
SetSourceRect | Définit le rectangle source. |
SetTargetRect | Définit le rectangle cible. |
UsingImageAllocator | Indique si l’allocateur actuel est un objet CImageAllocator . |
Configuration requise
Condition requise | Valeur |
---|---|
En-tête |
|
Bibliothèque |
|