Partager via


Méthode IPrintOemUni ::FilterGraphics (prcomoem.h)

La méthode IPrintOemUni ::FilterGraphics peut être utilisée avec les imprimantes prises en charge par Unidrv pour modifier les données de ligne d’analyse et les envoyer au spouleur.

Syntaxe

HRESULT FilterGraphics(
  PDEVOBJ pdevobj,
  PBYTE   pBuf,
  DWORD   dwLen
);

Paramètres

pdevobj

Pointeur fourni par l’appelant vers une structure DEVOBJ .

pBuf

Pointeur fourni par l’appelant vers une mémoire tampon contenant les données de ligne de numérisation à imprimer.

dwLen

Valeur fournie par l’appelant représentant la longueur, en octets, des données pointées par pBuf.

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.

Remarques

La méthode IPrintOemUni ::FilterGraphics est utilisée pour modifier les données de ligne d’analyse avant d’être envoyées au spouleur d’impression. La méthode est responsable de l’envoi des données qu’elle reçoit au spouleur.

La méthode IPrintOemUni ::FilterGraphics 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 « FilterGraphics » comme entrée.

Si la méthode IPrintOemUni ::FilterGraphics est implémentée, Unidrv ne met pas en pool les données d’imprimante. Au lieu de cela, Unidrv appelle cette méthode chaque fois qu’une mémoire tampon de données d’image est prête à être mise en pool.

Notez que lorsque cette méthode est implémentée, Unidrv ne compresse pas non plus les données d’imprimante, comme il le fait normalement. Si vous envisagez d’utiliser la compression Unidrv, vous ne devez pas implémenter cette méthode. En outre, vous devez modifier IPrintOemUni ::GetImplementedMethod afin qu’il retourne S_FALSE lorsqu’il reçoit la chaîne « FilterGraphics ».

La méthode peut effectuer un post-traitement final des données d’image, par exemple la suppression des points adjacents ou toute autre opération de filtrage de flux de données que Unidrv ne fournit pas. Il doit ensuite mettre en pool les données en appelant la méthode IPrintOemDriverUni ::D rvWriteSpoolBuf .

La méthode IPrintOemUni ::FilterGraphics est appelée par la fonction DrvSendPage d’Unidrv. Si vous souhaitez implémenter IPrintOemUni ::FilterGraphics, vous ne devez pas remplacer complètement les fonctions DrvSendPage ou DrvNextBand d’Unidrv.

Avant que la fonction DrvSendPage d’Unidrv n’appelle l’implémentation IPrintOemUni ::FilterGraphics du plug-in, DrvSendPage.

  1. Si nécessaire, transpose l’image bitmap qui doit être rendue.

  2. Transforme une passe de sortie qui se compose de données de couleur en un seul tableau contigu de données.

  3. Traite un groupe de lignes d’analyse et transforme ces données en commandes pour l’imprimante.

  4. Définit la position X/Y et transmet la ligne de données graphiques à l’imprimante.

Si le plug-in a implémenté IPrintOemUni ::FilterGraphics, Unidrv appelle le plug-in avec les données de ligne d’analyse au lieu de les envoyer à l’imprimante.

La méthode IPrintOemUni ::FilterGraphics permet à un plug-in de rendu de modifier les données de ligne d’analyse et de les envoyer au spouleur. Si vous implémentez cette fonction, Unidrv ne met pas en pool vos données. Au lieu de cela, IPrintOemUni ::FilterGraphics est appelé chaque fois qu’une mémoire tampon de données est prête à être mise en attente et envoyée à l’imprimante.

Vous pouvez utiliser IPrintOemUni ::FilterGraphics pour implémenter une méthode de compression spéciale ou pour effectuer une manipulation de bits sur le flux de données envoyé à l’imprimante ou les deux. Dans tous les cas, le code de compression intégré du pilote n’est pas utilisé. IPrintOemUni ::FilterGraphics est présenté avec un bloc de données et est nécessaire pour générer ces données à l’aide de la fonction DrvWriteSpoolBuf . Le pilote principal (Unidrv) n’effectue aucun traitement supplémentaire des données raster après avoir appelé OEMFilterGraphics.

Lorsque vous implémentez la méthode IPrintOemUni ::FilterGraphics dans votre plug-in, elle est utilisée pour envoyer les données raster directement à l’imprimante. Le nombre de lignes d’analyse dans un bloc est spécifié par le biais de l’attribut PinsPerPhysPass associé à la fonctionnalité Résolution Cet attribut est facultatif et, si vous ne le spécifiez pas, il est défini sur 1 (comme pour la plupart des imprimantes à jet d’encre et de page). Sinon, PinsPerPhysPass doit être un multiple de 8. Dans IPrintOemUni ::FilterGraphics, le paramètre pBuf pointe vers la mémoire tampon qui contient les données raster de ligne d’analyse que vous allez manipuler si nécessaire (par exemple, pour la compression) et finalement envoyer. Le paramètre dwLen est la longueur de la mémoire tampon vers laquelle pBuf pointe.

La liste suivante décrit plusieurs scénarios courants d’implémentation d’IPrintOemUni ::FilterGraphics :

  • Techniques de compression spéciales

  • Manipulation de bits des données raster entrantes avant de les envoyer à l’imprimante

IPrintOemUni ::FilterGraphics envoie enfin toutes les données à l’imprimante à l’aide de la fonction DrvWriteSpoolBuf . Le pilote principal (Unidrv) n’effectue plus de traitement sur les données envoyées par IPrintOemUni ::FilterGraphics . Si le plug-in effectue une compression spéciale ou une manipulation de bits, le plug-in doit allouer les mémoires tampons nécessaires à la compression spéciale ou à la manipulation de bits. Si le plug-in n’alloue pas ses propres mémoires tampons et si les données compressées sont plus petites que la source, la sortie remplace la mémoire tampon source.

La méthode IPrintOemUni ::FilterGraphics vous donne accès aux données de ligne d’analyse proprement dites et vous permet de post-traiter les données raster.

Le nombre de lignes d’analyse est égal à la hauteur de l’image. Par exemple, une épaisseur de 1 bit par pixel (bpp) de chaque ligne de balayage est égale à la largeur de 1 pixel, de sorte que le nombre de lignes de balayage est égal à la hauteur de l’image.

Pour plus d’informations sur la personnalisation des opérations de rendu d’Unidrv, consultez Rendu personnalisé spécifique à Unidrv.

Configuration requise

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

Voir aussi

DrvNextBand

DrvSendPage

DrvWriteSpoolBuf

IPrintOemDriverUni ::D rvWriteSpoolBuf

IPrintOemUni

IPrintOemUni ::GetImplementedMethod

OEMFilterGraphics