IPrintOemUni ::ImageProcessing, méthode (prcomoem.h)

La IPrintOemUni::ImageProcessing méthode peut être utilisée avec les imprimantes prises en charge par Unidrv pour modifier les données bitmap d’image, afin d’effectuer la mise en forme des couleurs ou le halftoning. La méthode peut retourner la bitmap modifiée à Unidrv ou l’envoyer directement au spouleur d’impression.

Syntaxe

HRESULT ImageProcessing(
        PDEVOBJ           pdevobj,
        PBYTE             pSrcBitmap,
        PBITMAPINFOHEADER pBitmapInfoHeader,
        PBYTE             pColorTable,
        DWORD             dwCallbackID,
        PIPPARAMS         pIPParams,
  [out] OUT PBYTE         *ppbResult
);

Paramètres

pdevobj

Pointeur fourni par l’appelant vers une structure DEVOBJ .

pSrcBitmap

Pointeur fourni par l’appelant vers une DIB d’entrée.

pBitmapInfoHeader

Pointeur fourni par l’appelant vers une structure BITMAPINFOHEADER qui décrit la bitmap pointée par pSrcBitmap. La structure BITMAPINFOHEADER est décrite dans la documentation Microsoft Windows SDK.

pColorTable

Pointeur fourni par l’appelant vers une table de couleurs. Ce paramètre est utilisé uniquement si le format de sortie est de huit bits par pixel. Pour plus d'informations, consultez la section Notes qui suit.

Lors de l’interprétation d’une bitmap, vous devez examiner la table de couleurs. Unidrv peut modifier les couleurs d’une bitmap, mais il effectue également les ajustements correspondants dans la table de couleurs, ce qui n’entraîne aucune modification nette. Toutefois, si vous ignorez les modifications apportées à la table de couleurs et examinez uniquement la bitmap, une image risque de ne pas s’imprimer correctement. Pour obtenir un exemple, consultez la discussion du paramètre pPaletteEntry dans HT_Get8BPPMaskPalette.

dwCallbackID

Valeur fournie par l’appelant affectée à l’attribut *IPCallbackID de l’option actuellement sélectionnée pour la fonctionnalité ColorMode. Pour plus d'informations, consultez la section Notes qui suit.

pIPParams

Pointeur fourni par l’appelant vers une structure IPPARAMS .

[out] ppbResult

Pointeur vers un emplacement de mémoire qui contient l’adresse d’une mémoire tampon. Le contenu de la mémoire tampon dépend de l’emplacement où la DIB convertie doit être envoyée.

Si cette méthode a l’intention de renvoyer la DIB convertie en Unidrv et réussit la conversion, elle doit définir *ppbResult sur l’adresse de la mémoire tampon contenant la DIB convertie et doit retourner S_OK. Si la conversion échoue, la méthode doit définir *ppbResult sur NULL et doit retourner E_FAIL.

Si cette méthode a l’intention d’envoyer le DIB converti au spouleur et réussit la conversion, la méthode doit définir *ppbResult sur TRUE et doit retourner S_OK. Si la conversion échoue, la méthode doit définir *ppbResult sur FALSE et doit retourner E_FAIL. Pour plus d’informations, consultez la discussion des attributs *DevBPP et *DevNumOfPlanes dans la section Remarques.

Valeur retournée

La méthode doit retourner l’une des valeurs suivantes.

Code de retour Description
S_OK
L’opération a réussi.
E_FAIL
L'opération a échoué.
E_NOTIMPL
Cette méthode n'est pas implémentée.
 

Caractéristiques des bitmaps sources

Caractéristiques bitmap de destination

Remarques

La IPrintOemUni::ImageProcessing méthode est utilisée pour modifier les bitmaps d’image avant qu’elles ne soient envoyées au spouleur d’impression. Son objectif est de fournir une prise en charge personnalisée des modes de couleur et des méthodes de halftoning non prises en charge par Unidrv. Un pilote d’imprimante qui envoie une bitmap au spouleur d’impression (au lieu de la renvoyer à Unidrv) doit définir les attributs *DevBPP et *DevNumOfPlanes sur zéro dans le fichier GPD de l’imprimante.

Si la méthode est implémentée et que l’entrée de fichier GPD pour le format de couleur actuel contient un attribut *IPCallbackID , Unidrv appelle la méthode chaque fois qu’une bitmap est disponible. L’appel est effectué après que GDI a rendu la bitmap, qui est ensuite envoyée au spouleur. (Pour plus d’informations sur l’attribut *IPCallbackID , consultez Attributs d’option pour la fonctionnalité ColorMode.)

Si le mode de couleur actuel, tel que spécifié par dwCallbackID, est pris en charge par Unidrv, la IPrintOemUni::ImageProcessing méthode doit effectuer des opérations de demi-toning sur la bitmap reçue et la renvoyer à Unidrv pour le spoulage. Si le mode de couleur actuel n’est pas pris en charge par Unidrv, la méthode doit effectuer des opérations de halftoning, puis mettre en pool la bitmap.

Si la méthode effectue uniquement des opérations de halftoning, elle doit effectuer les opérations suivantes :

  • Effectuez des opérations de halftoning sur les données, comme indiqué par le membre pHalftoneOption de la structure IPPARAMS .
  • Retournez les données d’image modifiées à Unidrv en les plaçant dans une mémoire tampon et en fournissant l’adresse de la mémoire tampon comme valeur de retour de la méthode. La mémoire tampon retournée peut être celle vers laquelle pSrcBitmap pointe, ou elle peut être allouée localement.
Pour plus d’informations sur la personnalisation des opérations de halftoning dans Unidrv, consultez Halftoning personnalisé.

Pour gérer la mise en forme personnalisée des couleurs, la IPrintOemUni::ImageProcessing méthode doit effectuer les opérations suivantes :

  • Convertissez les données DIB, décrites par les valeurs des paramètres pSrcBitmap et pBitmapInfoHeader , dans le format de couleur indiqué par dwCallbackID.
  • Effectuez des opérations de halftoning sur les données, comme indiqué par le membre pHalftoneOption de la structure IPPARAMS .
  • Envoyez les données au spouleur d’impression en appelant la méthode IPrintOemDriverUni ::D rvWriteSpoolBuf .
  • Modifiez la position du curseur de l’imprimante en effectuant des appels appropriés aux méthodes IPrintOemDriverUni ::D rvXMoveTo et IPrintOemDriverUni ::D rvYMoveTo .
Pour plus d’informations sur la personnalisation des opérations de mise en forme des couleurs dans Unidrv, consultez Formats de couleurs personnalisés.

Le paramètre dwCallbackID indique le type de mise en forme de couleur, le cas échéant, qui doit être effectuée. Dans le fichier GPD de l’imprimante, chaque entrée *Option pour la fonctionnalité ColorMode décrit un format de couleur. Si le format nécessite un traitement par la IPrintOemUni::ImageProcessing méthode , son entrée *Option doit contenir un attribut *IPCallbackID . Quand Unidrv appelle la IPrintOemUni::ImageProcessing méthode, elle fournit la valeur d’attribut associée à l’option actuellement sélectionnée pour la fonctionnalité ColorMode. Cette valeur est la valeur du paramètre dwCallbackID .

Que la IPrintOemUni::ImageProcessing méthode effectue des opérations de mise en forme de couleur et de mise en pool des données d’image, ou qu’elle effectue simplement des opérations de halftoning et retourne des bitmaps traitées à Unidrv, elle doit exporter une méthode IPrintOemUni ::MemoryUsage si elle alloue des quantités importantes de mémoire aux bitmaps de destination ou à d’autres fins. Dans le cas contraire, les performances du système peuvent être dégradées.

Si la méthode est implémentée, elle est appelée pour chaque région raster de la page. Toutefois, si une région est vide, le membre bBlankBand de la structure IPPARAMS est défini sur TRUE, ce qui indique que le bloc est vide et que les données ne sont pas valides. Étant donné qu’une bande peut être divisée en blocs alternatifs de régions vides et non vides pour optimiser les performances, la taille de bloc ne correspond pas toujours à la taille de la bande.

La bitmap source décrite par pSrcBitmap et pBitmapInfoHeader présente les caractéristiques suivantes :

  • Les contenus DIB sont classés de haut en bas et non compressés.
  • Le format de données est celui répertorié dans Gestion des formats de couleurs.
  • Si le format nécessite une table de couleurs, la table est pointée vers pColorTable.
  • Les données de couleur sont au format PRIMARY_ORDER_CBA, comme expliqué dans la description du membre ulPrimaryOrder de la structure GDIINFO . En d’autres termes, si le format de couleur est RVB ou CMY, les n bits les moins significatifs doivent contenir la valeur bleue ou jaune, les n bits suivants doivent contenir la valeur verte ou magenta, et les n bits suivants doivent contenir la valeur rouge ou cyan. Les bits inutilisés sont dans la position la plus significative. Si le format utilise 4 bits par pixel, n est 1. Pour 24 bits par pixel, n est 8, comme illustré dans la figure suivante. Pour CMJN, le quatrième groupe de n bits contient du noir.

PRIMARY_ORDER_CBA Format
La figure précédente illustre les données de couleur dans PRIMARY_ORDER_CBA format pour deux pixels, avec 24 bits de données de couleur par pixel. En passant d’adresses mémoire insuffisantes à des adresses de mémoire élevée, il y a huit bits de données bleues, huit bits de données vertes, puis huit bits de données rouges, après quoi le modèle se répète. Il s’agit également de l’ordre de sortie des appareils BGR.
Pour les opérations de halftoning, dans lesquelles une bitmap traitée est retournée à Unidrv, la bitmap retournée doit avoir les caractéristiques suivantes :
  • Le contenu DIB doit être ordonné de haut en bas et non compressé.
  • Le format de données doit être répertorié dans Gestion des formats de couleurs, et il doit être compatible avec les attributs *DevBPP et *DevNumOfPlanes du format de couleur identifié par dwCallbackID. (Pour plus d’informations sur ces attributs, consultez Attributs d’option pour la fonctionnalité ColorMode.)
  • Si le format nécessite une table de couleurs, la table doit être créée et son adresse doit être retournée dans pColorTable.
  • Les données de couleur doivent être retournées dans PRIMARY_ORDER_CBA format, comme décrit pour l’image bitmap source.
  • La structure BITMAPINFOHEADER spécifiée par pBitmapInfoHeader doit décrire les bitmaps d’entrée et de sortie. La IPrintOemUni::ImageProcessing méthode ne doit pas modifier le contenu de la structure.
La IPrintOemUni::ImageProcessing méthode est facultative. Si un plug-in de rendu implémente cette méthode, la méthode IPrintOemUni ::GetImplementedMethod du plug-in doit retourner S_OK lorsqu’elle reçoit « ImageProcessing » comme entrée.

Configuration requise

Condition requise Valeur
Plateforme cible Desktop (Expérience utilisateur)
En-tête prcomoem.h (include Prcomoem.h)

Voir aussi

HT_Get8BPPMaskPalette

IPrintOemUni

IPrintOemUni ::FilterGraphics