CDrawImage, classe

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 fournit aucune prise en charge pour le rendu avec DirectDraw. La CDrawImage classe exige 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 illustre la méthode recommandée pour 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 indiqué dans le diagramme précédent utilise une classe Allocator personnalisée, CImageAllocator. Cet allocateur crée des DIB 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 est propriétaire de l’allocateur pour la connexion, les exemples de supports sont garantis comme des objets CImageSample . Dans ce cas, l’objet CDrawImage peut optimiser le dessin à l’aide de BitBlt ou de StretchBlt. Dans le cas contraire, il doit utiliser les fonctions SetDIBitsToDevice ou StretchDIBits plus lentes. L’option plus rapide est implémentée par la méthode CDrawImage :: FastRender , plus lente par la méthode CDrawImage :: SlowRender . (En dépit du nom, vous ne verrez probablement pas un gain de performances important dans SlowRender, en particulier sur du matériel plus récent.)

Palettes

Si la méthode FastRender est utilisée pour le dessin et que l’image est en palette, 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 en palette, 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 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 des couleurs dans le contexte de périphérique, à l’aide de la fonction GDI SetDIBColorTable . En outre, la version de palette sur l’exemple est mise à jour avec le numéro de version actuel.
  • Si le code confidentiel se reconnecte, le filtre doit appeler CDrawImage :: ResetPaletteVersion pour réinitialiser la version de la palette. Lors de la reconnexion du pin, l’allocateur réalloue tous les exemples.
Variables membres protégées Description
m _ bStretch Indique si l’image vidéo doit être étirée pour s’ajuster à la fenêtre de destination.
m _ bUsingImageAllocator Indique si l’allocateur pour la connexion de code confidentiel est un objet CImageAllocator .
m _ EndSample Spécifie l’heure d’arrêt de l’exemple le plus récent.
HDC de m _ Handle vers le contexte de périphérique de la fenêtre propriétaire.
m _ MemoryDC Handle vers le contexte de périphérique de mémoire de la fenêtre propriétaire.
m _ PaletteVersion Utilisé pour effectuer le suivi de la modification de la palette.
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 échantillon de support en haut de 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 Met à jour la table des couleurs avec une nouvelle palette.
Méthodes publiques Description
CDrawImage Méthode de 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 de périphérique 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 Informe l' CDrawImage objet si l’allocateur pour la connexion est un objet CImageAllocator .
NotifyEndDraw Non pris en charge.
NotifyMediaType Avertit 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 de la vidéo native et le format du type de média. Virtuels.
SetDrawContext Définit les contextes de périphérique 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 .

Spécifications

Condition requise Valeur
En-tête
Winutil. h (inclure Flux. h)
Bibliothèque
Strmbase. lib (versions commerciales);
Strmbasd. lib (versions Debug)