Effet de source bitmap
Utilisez l’effet de source bitmap pour générer un ID2D1Image à partir d’un IWICBitmapSource à utiliser comme entrée dans un graphique d’effets. Cet effet effectue une mise à l’échelle et une rotation sur le processeur. Il peut également générer un mipmap de mémoire système, qui peut être une optimisation des performances pour la mise à l’échelle active d’images très volumineuses avec différentes résolutions réduites.
Notes
L’effet de source bitmap prend son entrée en tant que propriété, et non en tant qu’entrée d’image. Vous devez utiliser la méthode SetValue , et non la méthode SetInput . La propriété WicBitmapSource est l’endroit où vous spécifiez les données d’entrée d’image.
Le CLSID de cet effet est CLSID_D2D1BitmapSource.
- Propriétés de l’effet
- Modes d’interpolation
- Orientation
- Modes alpha
- Remarques
- Configuration requise
- Rubriques connexes
Propriétés de l’effet
Nom complet et énumération d’index | Description |
---|---|
WicBitmapSource D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE |
IWICBitmapSource contenant les données d’image à charger. Le type est IWICBitmapSource. La valeur par défaut est NULL. |
Scale D2D1_BITMAPSOURCE_PROP_SCALE |
Quantité d’échelle dans la direction X et Y. L’effet multiplie la largeur par la valeur X et la hauteur par la valeur Y. Cette propriété est une D2D1_VECTOR_2F définie comme suit : (échelle X, échelle Y). Les quantités d’échelle sont FLOAT, sans unité et doivent être positives ou 0. Le type est D2D1_VECTOR_2F. La valeur par défaut est {1.0f, 1.0f}. |
InterpolationMode. D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE |
Mode d’interpolation utilisé pour mettre à l’échelle l’image. Pour plus d’informations, consultez Modes d’interpolation . Si le mode désactive le mipmap, BitmapSouce met en cache l’image à la résolution déterminée par les propriétés Scale et EnableDPICorrection. Le type est D2D1_BITMAPSOURCE_INTERPOLATION_MODE. La valeur par défaut est D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR. |
EnableDPICorrection D2D1_BITMAPSOURCE_PROP_ENABLE_DPI_CORRECTION |
Si vous définissez cette valeur sur TRUE, l’effet met à l’échelle l’image d’entrée pour convertir l’ppp signalé par IWICBitmapSource en ppp du contexte de l’appareil. L’effet utilise le mode d’interpolation que vous définissez avec la propriété InterpolationMode. Si vous définissez cette valeur sur FALSE, l’effet utilise un PPP de 96,0 pour l’image de sortie. Le type est BOOL. La valeur par défaut est FALSE. |
AlphaMode D2D1_BITMAPSOURCE_PROP_ALPHA_MODE |
Mode alpha de la sortie. Cela peut être prémultiplié ou droit. Pour plus d’informations, consultez Modes alpha . Le type est D2D1_BITMAPSOURCE_ALPHA_MODE. La valeur par défaut est D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED. |
Orientation D2D1_BITMAPSOURCE_PROP_ORIENTATION |
Opération de rotation et/ou de rotation à effectuer sur l’image. Pour plus d’informations , consultez Orientation. Le type est D2D1_BITMAPSOURCE_ORIENTATION. La valeur par défaut est D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT. |
Modes d’interpolation
L’effet interpole à l’aide de ce mode lorsqu’il met à l’échelle une image ou quand il corrige la ppp. Les modes d’interpolation que cet effet utilise sont calculés par le processeur, et non par le GPU.
Nom | Description |
---|---|
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_NEAREST_NEIGHBOR | Échantillonne le point unique le plus proche et l’utilise. Ne génère pas de mipmap. |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR | Utilise un échantillon à quatre points et une interpolation linéaire. Ne génère pas de mipmap. |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_CUBIC | Utilise un noyau cube de 16 exemples pour l’interpolation. Ne génère pas de mipmap. |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_FANT | Utilise l’interpolation de fant WIC, identique à l’interface IWICBitmapScaler . Ne génère pas de mipmap. |
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR | Génère une chaîne mipmap dans la mémoire système à l’aide de l’interpolation bilinéaire. Pour chaque mipmap, l’effet est mis à l’échelle au multiple le plus proche de 0,5 à l’aide de l’interpolation bilinéaire, puis met à l’échelle la quantité restante à l’aide de l’interpolation linéaire. |
Orientation
La propriété Orientation peut être utilisée pour appliquer un indicateur d’orientation EXIF incorporé dans une image.
Nom | Description |
---|---|
D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT | Par défaut. L’effet ne modifie pas l’orientation de l’entrée. |
D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL | Retourne l’image horizontalement. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180 | Fait pivoter l’image dans le sens des aiguilles d’une montre de 180 degrés. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL | Fait pivoter l’image dans le sens des aiguilles d’une montre de 180 degrés et la retourne horizontalement. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL | Fait pivoter l’image dans le sens des aiguilles d’une montre de 270 degrés et la retourne horizontalement. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90 | Fait pivoter l’image dans le sens des aiguilles d’une montre de 90 degrés. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL | Fait pivoter l’image dans le sens des aiguilles d’une montre de 90 degrés et la retourne horizontalement. |
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270 | Fait pivoter l’image dans le sens des aiguilles d’une montre de 270 degrés. |
Cet extrait de code montre comment convertir des valeurs d’orientation EXIF (définies dans propkey.h) en valeurs D2D1_BITMAPSOURCE_ORIENTATION.
#include <propkey.h>
#include <d2d1effects.h>
D2D1_BITMAPSOURCE_ORIENTATION GetBitmapSourceOrientation(unsigned short PhotoOrientation)
{
switch (PhotoOrientation)
{
case PHOTO_ORIENTATION_NORMAL:
return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
case PHOTO_ORIENTATION_FLIPHORIZONTAL:
return D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL;
case PHOTO_ORIENTATION_ROTATE180:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180;
case PHOTO_ORIENTATION_FLIPVERTICAL:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL;
case PHOTO_ORIENTATION_TRANSPOSE:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL;
case PHOTO_ORIENTATION_ROTATE270:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90;
case PHOTO_ORIENTATION_TRANSVERSE:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL;
case PHOTO_ORIENTATION_ROTATE90:
return D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270;
default:
return D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT;
}
}
Modes alpha
Nom | Description |
---|---|
D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED | La sortie de l’effet utilise l’alpha prémultipliée. |
D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT | La sortie de l’effet utilise l’alpha droite. |
Notes
Pour optimiser les performances lors de l’utilisation de WIC et Direct2D ensemble, vous devez utiliser IWICFormatConverter pour convertir en un format de pixel approprié en fonction de votre scénario d’application et de la précision native de l’image.
Dans la plupart des cas, le pipeline Direct2D de votre application ne nécessite que 8 bits par canal (bpc) de précision, ou l’image ne fournit que 8 bpc de précision. Vous devez donc convertir en GUID_WICPixelFormat32bppPBGRA. Toutefois, si vous souhaitez tirer parti de la précision supplémentaire fournie par une image (par exemple, un fichier JPEG-XR ou TIFF stocké avec une précision supérieure à 8 bpc), vous devez utiliser un format de pixel basé sur RVBA. Le tableau ci-dessous fournit plus de détails.
Précision souhaitée | Précision native de l’image | Format de pixel recommandé |
---|---|---|
8 bits par canal | <= 8 bits par canal | GUID_WICPixelFormat32bppPBGRA |
Aussi haut que possible | <= 8 bits par canal | GUID_WICPixelFormat32bppPBGRA |
Aussi haut que possible | > 8 bits par canal | Ordre des canaux RVBA, alpha prémultiplié |
Étant donné que de nombreux formats d’image prennent en charge plusieurs niveaux de précision, vous devez utiliser IWICBitmapSource::GetPixelFormat pour obtenir le format de pixel natif de l’image, puis utiliser IWICPixelFormatInfo pour déterminer le nombre de bits disponibles pour ce format par canal de précision. Notez également que tous les matériels ne prennent pas en charge les formats de pixels de haute précision. Dans ce cas, votre application peut avoir besoin de revenir à l’appareil WARP pour prendre en charge la haute précision.
Spécifications
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 8 et mise à jour de plateforme pour Windows 7 [applications de bureau | Applications du Windows Store] |
Serveur minimal pris en charge | Windows 8 et mise à jour de plateforme pour Windows 7 [applications de bureau | Applications du Windows Store] |
En-tête | d2d1effects.h |
Bibliothèque | d2d1.lib, dxguid.lib |