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 |
---|---|
|
L’opération a réussi. |
|
L’opération a échoué. |
|
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 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.
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.
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.
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) |