Condividi tramite


Effetto origine bitmap

Usare l'effetto origine bitmap per generare un ID2D1Image da un IWICBitmapSource da usare come input in un grafico degli effetti. Questo effetto esegue il ridimensionamento e la rotazione sulla CPU. Può anche generare facoltativamente un mipmap della memoria di sistema, che può essere un'ottimizzazione delle prestazioni per ridimensionare attivamente immagini molto grandi a varie risoluzioni ridotte.

Nota

L'effetto origine bitmap accetta l'input come proprietà, non come input dell'immagine. È necessario utilizzare il metodoSetValue, non il metodo SetInput. La proprietà WicBitmapSource è la posizione in cui si specificano i dati di input dell'immagine.

Il CLSID per questo effetto è CLSID_D2D1BitmapSource.

Proprietà dell'effetto

Enumerazione del nome visualizzato e dell'indice Descrizione
WicBitmapSource
D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE
Il IWICBitmapSource contenente i dati dell'immagine da caricare.
Il tipo è IWICBitmapSource.
Il valore predefinito è NULL.
Scala
D2D1_BITMAPSOURCE_PROP_SCALE
Quantità di scala nella direzione X e Y. L'effetto moltiplica la larghezza per il valore X e l'altezza in base al valore Y. Questa proprietà è un D2D1_VECTOR_2F definito come: (scala X, scala Y). Gli importi di scala sono FLOAT, unitless e devono essere positivi o 0.
Il tipo è D2D1_VECTOR_2F.
Il valore predefinito è {1.0f, 1.0f}.
InterpolationMode.
D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE
Modalità di interpolazione utilizzata per ridimensionare l'immagine. Per altre informazioni, vedi modalità di interpolazione.
Se la modalità disabilita il mipmap, BitmapSouce memorizza l'immagine nella cache alla risoluzione determinata dalle proprietà Scale e EnableDPICorrection.
Il tipo è D2D1_BITMAPSOURCE_INTERPOLATION_MODE.
Il valore predefinito è D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR.
EnableDPICorrection
D2D1_BITMAPSOURCE_PROP_ENABLE_DPI_CORRECTION
Se si imposta questa proprietà su TRUE, l'effetto ridimensiona l'immagine di input per convertire il valore DPI segnalato da IWICBitmapSource in DPI del contesto di dispositivo. L'effetto usa la modalità di interpolazione impostata con la proprietà InterpolationMode. Se si imposta questa proprietà su FALSE, l'effetto usa un valore DPI pari a 96,0 per l'immagine di output.
Il tipo è BOOL.
Il valore predefinito è FALSE.
AlphaMode
D2D1_BITMAPSOURCE_PROP_ALPHA_MODE
Modalità alfa dell'output. Può essere premoltiplicato o dritto. Per altre informazioni, vedi modalità Alfa.
Il tipo è D2D1_BITMAPSOURCE_ALPHA_MODE.
Il valore predefinito è D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED.
Orientamento
D2D1_BITMAPSOURCE_PROP_ORIENTATION
Operazione di scorrimento e/o rotazione da eseguire sull'immagine. Per altre informazioni, vedi orientamento.
Il tipo è D2D1_BITMAPSOURCE_ORIENTATION.
Il valore predefinito è D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT.

Modalità di interpolazione

L'effetto esegue l'interpolazione usando questa modalità quando ridimensiona un'immagine o quando corregge il valore DPI. Le modalità di interpolazione usate da questo effetto vengono calcolate dalla CPU, non dalla GPU.

Nome Descrizione
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_NEAREST_NEIGHBOR Campiona il singolo punto più vicino e lo usa. Non genera un mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR Usa un campione a quattro punti e l'interpolazione lineare. Non genera un mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_CUBIC Usa un kernel cubico di esempio 16 per l'interpolazione. Non genera un mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_FANT Usa l'interpolazione fant wic, uguale all'interfacciaIWICBitmapScaler. Non genera un mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR Genera una catena mipmap nella memoria di sistema usando l'interpolazione bilineare. Per ogni mipmap l'effetto viene ridimensionato al multiplo più vicino di 0,5 usando l'interpolazione bilineare e quindi ridimensiona la quantità rimanente usando l'interpolazione lineare.

Orientamento

La proprietà Orientation può essere utilizzata per applicare un flag di orientamento EXIF incorporato all'interno di un'immagine.

Nome Descrizione
D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT Default. L'effetto non modifica l'orientamento dell'input.
D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL Capovolge l'immagine orizzontalmente.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180 Ruota l'immagine in senso orario di 180 gradi.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL Ruota l'immagine in senso orario di 180 gradi e la capovolge orizzontalmente.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL Ruota l'immagine in senso orario di 270 gradi e la capovolge orizzontalmente.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90 Ruota l'immagine in senso orario di 90 gradi.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL Ruota l'immagine in senso orario di 90 gradi e la capovolge orizzontalmente.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270 Ruota l'immagine in senso orario di 270 gradi.

Questo frammento di codice illustra come eseguire la conversione da valori di orientamento EXIF (definiti in propkey.h) a valori 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;
       }
}

Modalità alfa

Nome Descrizione
D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED L'output dell'effetto usa alfa premoltiplicato.
D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT L'output dell'effetto usa alfa dritto.

Osservazioni

Per ottimizzare le prestazioni quando si usa WIC e Direct2D insieme, è consigliabile usare IWICFormatConverter per eseguire la conversione in un formato pixel appropriato in base allo scenario dell'app e alla precisione nativa dell'immagine.

Nella maggior parte dei casi, la pipeline direct2D dell'app richiede solo 8 bit per canale (bpc) di precisione oppure l'immagine fornisce solo 8 bpc precisione e pertanto è necessario eseguire la conversione in GUID_WICPixelFormat32bppPBGRA. Tuttavia, se si desidera sfruttare la precisione aggiuntiva fornita da un'immagine (ad esempio, un JPEG-XR o TIFF archiviato con una precisione maggiore di 8 bpc), è consigliabile usare un formato pixel basato su RGBA. La tabella seguente fornisce altri dettagli.

Precisione desiderata Precisione nativa dell'immagine Formato pixel consigliato
8 bit per canale <= 8 bit per canale GUID_WICPixelFormat32bppPBGRA
Il più alto possibile <= 8 bit per canale GUID_WICPixelFormat32bppPBGRA
Il più alto possibile > 8 bit per canale Ordine del canale RGBA, alfa premoltiplicato

Poiché molti formati di immagine supportano più livelli di precisione, è consigliabile usare IWICBitmapSource::GetPixelFormat per ottenere il formato pixel nativo dell'immagine e quindi usare IWICPixelFormatInfo per determinare il numero di bit per canale di precisione disponibile per tale formato. Si noti anche che non tutti gli hardware supportano formati pixel ad alta precisione. In questi casi l'app potrebbe dover eseguire il fallback al dispositivo WARP per supportare la precisione elevata.

Fabbisogno

Requisito Valore
Client minimo supportato Windows 8 e Aggiornamento della piattaforma per Windows 7 [app desktop | App di Windows Store]
Server minimo supportato Windows 8 e Aggiornamento della piattaforma per Windows 7 [app desktop | App di Windows Store]
Intestazione d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect