Partager via


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

La méthode IPrintOemUni ::FilterGraphics peut être utilisée avec des imprimantes non prises en charge 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 d’analyse à imprimer.

dwLen

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

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 Échec de l’opération
E_NOTIMPL La 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 chargée d’envoyer les 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, le plug-in IPrintOemUni ::GetImplementedMethod méthode doit retourner S_OK lorsqu’il reçoit « FilterGraphics » comme entrée.

Si la méthode IPrintOemUni ::FilterGraphics est implémentée, Unidrv ne spool pas de 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 également les données d’imprimante, comme c’est le cas normalement. Si vous envisagez d’utiliser la compression Unidrv, vous ne devez pas implémenter cette méthode. Vous devez également modifier IPrintOemUni ::GetImplementedMethod afin qu’elle retourne S_FALSE lorsqu’elle est passée à la chaîne « FilterGraphics ».

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

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.

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

  1. Si nécessaire, transpose la bitmap à afficher.

  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 l’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 spoolra pas vos données. Au lieu de cela, IPrintOemUni ::FilterGraphics sera appelée chaque fois qu’une mémoire tampon de données est prête à être mise en pool 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 doit 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 sera utilisée pour envoyer les données raster directement à l’imprimante. Le nombre de lignes d’analyse dans un bloc est spécifié via l’attribut PinsPerPhysPass associé à la fonctionnalité de 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 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 manipulerez si nécessaire (par exemple, pour la compression) et enfin envoyer. Le paramètre dwLen est la longueur de la mémoire tampon vers laquelle point de pBuf.

La liste suivante décrit plusieurs scénarios courants d’implémentation 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) ne traite plus les données que IPrintOemUni ::FilterGraphics envoie. Si le plug-in effectue une compression ou une manipulation de bits spéciale, le plug-in doit allouer les mémoires tampons nécessaires pour la compression ou la manipulation de bits spéciale. 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 elle-même 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 d’analyse est égale à la largeur de 1 pixel, de sorte que le nombre de lignes d’analyse est égal à la hauteur de l’image.

Pour plus d’informations sur la personnalisation des opérations de rendu d’Unidrv, consultez Unidrv-Specificde rendu personnalisé.

Exigences

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

Voir aussi

DrvNextBand

DrvSendPage

DrvWriteSpoolBuf

IPrintOemDriverUni ::D rvWriteSpoolBuf

IPrintOemUni

IPrintOemUni ::GetImplementedMethod

oemFilterGraphics