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

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

ID2D1Effect