Fonction DrvStretchBltROP (winddi.h)
La fonction DrvStretchBltROP effectue un transfert de bloc de bits d’étirement à l’aide d’un ROP.
Syntaxe
BOOL DrvStretchBltROP(
[in, out] SURFOBJ *psoDest,
[in, out] SURFOBJ *psoSrc,
[in, optional] SURFOBJ *psoMask,
[in] CLIPOBJ *pco,
[in, optional] XLATEOBJ *pxlo,
[in, optional] COLORADJUSTMENT *pca,
[in] POINTL *pptlHTOrg,
[in] RECTL *prclDest,
[in] RECTL *prclSrc,
[in, optional] POINTL *pptlMask,
[in] ULONG iMode,
[in] BRUSHOBJ *pbo,
[in] DWORD rop4
);
Paramètres
[in, out] psoDest
Pointeur vers une structure SURFOBJ qui décrit la surface sur laquelle dessiner.
[in, out] psoSrc
Pointeur vers une structure SURFOBJ qui décrit la surface source pour le transfert de bloc de bits.
[in, optional] psoMask
Pointeur vers une structure SURFOBJ qui définit un masque pour la source. Le masque est défini par une carte logique, qui est une bitmap avec un bit par pixel. En règle générale, un masque limite la zone à modifier dans la surface de destination. Ce masque a toujours la même taille que la surface source.
[in] pco
Pointeur vers une structure CLIPOBJ qui limite la zone à modifier dans la destination. Les routines de service CLIPOBJ_Xxx sont fournies pour énumérer la région de clip sous la forme d’un ensemble de rectangles.
Dans la mesure du possible, GDI simplifie le découpage impliqué. Toutefois, contrairement à DrvBitBlt, DrvStretchBltROP peut être appelé avec un rectangle de découpage unique. Cela empêche les erreurs d’arrondi lors de la coupe de la sortie.
[in, optional] pxlo
Pointeur vers une structure XLATEOBJ qui spécifie la façon dont les index de couleur doivent être traduits entre les surfaces source et cible. Si pxlo a la valeur NULL, aucune traduction n’est nécessaire.
Cette structure XLATEOBJ peut également être interrogée pour trouver la couleur RVB de n’importe quel index source. Un transfert de bloc de bits étirement de haute qualité doit interpoler les couleurs dans certains cas.
[in, optional] pca
Pointeur vers une structure COLORADJUSTMENT qui définit les valeurs d’ajustement des couleurs à appliquer à l’image bitmap source avant d’étendre les bits. Pour plus d’informations, consultez la documentation Microsoft Windows SDK.
[in] pptlHTOrg
Pointeur vers une structure POINTL qui définit l’origine du pinceau en demi-teinte sur la surface de destination. Lorsque vous utilisez des pinceaux demi-teintes, le pilote doit aligner le pixel supérieur gauche du pinceau sur ce point et répéter le pinceau en fonction de ses dimensions. Le pilote doit ignorer ce paramètre si le paramètre rop4 ne nécessite pas de modèle.
[in] prclDest
Pointeur vers une structure RECTL qui définit la zone rectangulaire à modifier. Ce rectangle est spécifié dans le système de coordonnées de la surface de destination et est défini par deux points : en haut à gauche et en bas à droite. Les deux points qui définissent le rectangle ne sont pas toujours bien ordonnés, ce qui signifie que les coordonnées du deuxième point ne sont pas nécessairement plus grandes que celles du premier point. Le pilote doit échanger les deux valeurs x et/ou les deux valeurs y si le rectangle de destination n’est pas bien ordonné.
Le rectangle est exclusif en bas à droite ; autrement dit, les bords inférieur et droit ne font pas partie de la copie.
DrvStretchBltROP n’est jamais appelé avec un rectangle de destination vide.
[in] prclSrc
Pointeur vers une structure RECTL qui définit la zone à copier. Ce rectangle est spécifié dans le système de coordonnées de la surface source et est défini par deux points : en haut à gauche et en bas à droite. Les deux points qui définissent le rectangle sont toujours bien ordonnés.
Le rectangle est exclusif en bas à droite ; autrement dit, ses bords inférieur et droit ne font pas partie de la copie.
Le pilote doit mapper ce rectangle au rectangle défini par prclDest.
[in, optional] pptlMask
Pointeur vers une structure POINTL qui définit un pixel dans le masque vers lequel pointe prclMask . Ce pixel correspond au pixel supérieur gauche dans le rectangle source auquel pointe prclSrc . Le pilote doit ignorer ce paramètre si aucun masque n’est spécifié.
[in] iMode
Spécifie la façon dont les pixels sources sont combinés pour obtenir des pixels de sortie. Le mode HALFTONE est plus lent que les autres modes, mais produit des images de qualité supérieure. Ce paramètre peut être l’une des valeurs suivantes :
Valeur | Signification |
---|---|
BLACKONWHITE | Lors d’un transfert de bloc de bits qui diminue, les pixels doivent être combinés à une opération BOOLEAN AND. Lors d’un transfert de bloc de bits étiré, les pixels doivent être répliqués. |
COLORONCOLOR | Lors d’un transfert de bloc de bits qui diminue, suffisamment de pixels doivent être ignorés afin que les pixels n’ont pas besoin d’être combinés. Lors d’un transfert de bloc de bits étiré, les pixels doivent être répliqués. |
DEMI-TEINTES | Le pilote peut utiliser des groupes de pixels dans la surface de sortie pour estimer au mieux la couleur ou le niveau de gris de l’entrée. |
WHITEONBLACK | Lors d’un transfert de bloc de bits de réduction, les pixels doivent être combinés à une opération OR booléenne. Lors d’un transfert de bloc de bits étiré, les pixels doivent être répliqués. |
[in] pbo
Pointeur vers la structure BRUSHOBJ à utiliser pour définir le modèle pour le transfert de bloc de bits. La routine de service BRUSHOBJ_pvGetRbrush de GDI récupère la réalisation du pinceau par l’appareil. Le pilote peut ignorer ce paramètre si le paramètre rop4 ne nécessite pas de modèle.
[in] rop4
Représente une opération raster qui définit la façon dont les pixels de masque, de modèle, de source et de destination sont combinés pour écrire un pixel de sortie sur la surface de destination.
Il s’agit d’une opération de raster quaternaire, qui est une extension naturelle de l’opération Rop3 ternaire habituelle. Un Rop4 a 16 bits pertinents, qui sont similaires aux 8 bits de définition d’un Rop3. (Les autres bits redondants du Rop3 sont ignorés.) Le moyen le plus simple d’implémenter un Rop4 consiste à considérer ses 2 octets séparément. L’octet inférieur spécifie un Rop3 qui doit être calculé partout où le masque vers lequel psoMask pointe est 1. L’octet élevé spécifie un Rop3 qui peut être calculé et appliqué partout où le masque est égal à zéro.
Valeur retournée
DrvStretchBltROP doit retourner TRUE en cas de réussite. Sinon, il doit signaler un code d’erreur et retourner FALSE.
Remarques
Le mappage est défini par prclSrc et prclDest. Les points spécifiés dans prclDest et prclSrc se trouvent sur des coordonnées entières, qui correspondent à des centres de pixels. Un rectangle défini par deux points de ce type est considéré comme un rectangle géométrique avec deux sommets dont les coordonnées sont les points donnés, mais avec 0,5 soustrait de chaque coordonnée. (Les structures POINTL sont des notations abrégées permettant de spécifier ces sommets de coordonnées fractionnaires.)
Le pilote peut éventuellement implémenter DrvStretchBltROP. Si le pilote ne branche pas cet appel, il peut appeler EngStretchBltROP pour effectuer les opérations d’étirement de fente qu’il ne prend pas en charge.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Desktop (Expérience utilisateur) |
En-tête | winddi.h (inclure Winddi.h) |