Partager via


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

La méthode IPrintOemUni::ImageProcessing peut être utilisée avec des imprimantes prises en charge par Unidrv pour modifier les données bitmap d’image, afin d’effectuer une mise en forme de couleur ou une demi-tonisation. La méthode peut renvoyer 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 un 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 du Kit de développement logiciel (SDK) Microsoft Windows.

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 Remarques suivante.

Lors de l’interprétation d’une bitmap, vous devez examiner la table de couleurs. Unidrv peut modifier les couleurs dans une bitmap, mais il effectue également des 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 peut 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é à l’attribut *IPCallbackID de l’option actuellement sélectionnée pour la fonctionnalité ColorMode. Pour plus d’informations, consultez la section Remarques suivante.

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 d’envoyer la DIB convertie à Unidrv et réussit dans la conversion, elle doit définir *ppbResult à 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 la DIB convertie au spouleur et réussit la conversion, la méthode doit définir *ppbResult sur TRUEet 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 sur les attributs *DevBPP et *DevNumOfPlanes dans la section Remarques.

Valeur de retour

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

Retourner le code Description
S_OK
L’opération a réussi.
E_FAIL
L’opération a échoué.
E_NOTIMPL
La méthode n’est pas implémentée.
 

caractéristiques de bitmap source

caractéristiques bitmap de destination

Remarques

La méthode IPrintOemUni::ImageProcessing 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 pour les modes de couleur et les méthodes de demi-toning non prises en charge par Unidrv. Un pilote d’imprimante qui envoie une bitmap au spouleur d’impression (par opposition à le 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 si 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 restitue l’image 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 celui pris en charge par Unidrv, la méthode IPrintOemUni::ImageProcessing doit effectuer des opérations de demi-toning sur la bitmap reçue et la retourner à Unidrv pour le spoulage. Si le mode de couleur actuel est un mode qu’Unidrv ne prend pas en charge, la méthode doit effectuer des opérations de demi-toning, puis spoolr la bitmap.

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

  • Effectuez des opérations de demi-tonisation sur les données, comme indiqué par le membre pHalftoneOption de la structure IPPARAMS.
  • Renvoyez les données d’image modifiées à Unidrv en la 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, ou il peut s’agir d’une mémoire tampon allouée localement.
Pour plus d’informations sur la personnalisation des opérations de demi-toning dans Unidrv, consultez personnalisé Halftoning .

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

  • Convertissez des données DIB, décrites par les valeurs de paramètres pSrcBitmap et pBitmapInfoHeader, dans le format de couleur indiqué par dwCallbackID.
  • Effectuez des opérations de demi-tonisation 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é. 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 le traitement par la méthode IPrintOemUni::ImageProcessing, son entrée *Option doit contenir un attribut *IPCallbackID. Lorsque Unidrv appelle la méthode IPrintOemUni::ImageProcessing, elle fournit la valeur d’attribut associée à l’option actuellement sélectionnée pour la fonctionnalité ColorMode. Cette valeur est la valeur dwCallbackID paramètre.

Que la méthode IPrintOemUni::ImageProcessing effectue des opérations de mise en forme des couleurs et dupooling des données d’image ou effectue simplement des opérations de demi-toning et retourne des bitmaps traitées à Unidrv, elle doit exporter une méthode IPrintOemUni ::MemoryUsage si elle alloue des quantités significatives de mémoire pour les bitmaps de destination ou d’autres fins. Sinon, les performances système peuvent être dégradées.

Si la méthode est implémentée, elle est appelée pour chaque région raster sur la page. Toutefois, si une région est vide, le bBlankBand membre 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 alternés de régions vides et non vides pour optimiser les performances, la taille du 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 en haut et non compressés.
  • Le format de données est un format répertorié dans Gestion des formats de couleurs.
  • Si le format nécessite un tableau de couleurs, le tableau est pointé par 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 doivent contenir la valeur bleue ou jaune, les n bits suivants doivent contenir la valeur verte ou magenta, et les n bits doivent contenir la valeur rouge ou cyan. Les bits inutilisés sont dans la position la plus importante. Si le format utilise 4 bits par pixel, n est égal à 1. Pour 24 bits par pixel, n est de 8, comme illustré dans la figure suivante. Pour CMYK, le quatrième groupe de bits n contient du noir.

PRIMARY_ORDER_CBA Format
La figure précédente représente les données de couleur au format PRIMARY_ORDER_CBA pour deux pixels, avec 24 bits de données de couleur par pixel. Passage d’adresses mémoire faible à des adresses mémoire élevée, il existe 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 de l’appareil BGR.
Pour les opérations de demi-toning, 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 classé de haut en bas et non compressé.
  • Le format de données doit être celui répertorié dans Gestion des formats de couleurs, et il doit être compatible avec les* DevBPP et *DevNumOfPlanes attributs du format de couleur identifiés 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, le tableau doit être créé et son adresse doit être retournée dans pColorTable.
  • Les données de couleur doivent être retournées au format PRIMARY_ORDER_CBA, comme décrit pour la bitmap source.
  • La structure BITMAPINFOHEADER spécifiée par pBitmapInfoHeader doit décrire les bitmaps d’entrée et de sortie. La méthode IPrintOemUni::ImageProcessing ne doit pas modifier le contenu de la structure.
La méthode IPrintOemUni::ImageProcessing est facultative. Si un plug-in de rendu implémente cette méthode, le plug-in IPrintOemUni ::GetImplementedMethod méthode doit retourner S_OK lorsqu’il reçoit « ImageProcessing » comme entrée.

Exigences

Exigence Valeur
plateforme cible Bureau
d’en-tête prcomoem.h (include Prcomoem.h)

Voir aussi

HT_Get8BPPMaskPalette

IPrintOemUni

IPrintOemUni ::FilterGraphics