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

Pour utiliser cette classe, procédez comme suit :
- Lorsque les codes confidentiels 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 en palette, comme décrit dans la section sur les palettes qui suivent.
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 |
|
| Bibliothèque |
|