Partager via


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é.

convertisseur vidéo personnalisé à l’aide de cdrawimage

Pour utiliser cette classe, procédez comme 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
Winutil.h (include Streams.h)
Bibliothèque
Strmbase.lib (builds de vente au détail) ;
Strmbasd.lib (builds de débogage)