Effetto origine bitmap

Usare l'effetto di origine bitmap per generare un ID2D1Image da un oggetto 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 dell'origine bitmap accetta l'input come proprietà, non come input dell'immagine. È necessario utilizzare il metodo SetValue , 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 nome visualizzato e indice Descrizione
WicBitmapSource
D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE
IWICBitmapSource contenente i dati dell'immagine da caricare.
Il tipo è IWICBitmapSource.
Il valore predefinito è NULL.
Scalabilità
D2D1_BITMAPSOURCE_PROP_SCALE
Quantità di scala nella direzione X e Y. L'effetto moltiplica la larghezza per il valore X e l'altezza per il valore Y. Questa proprietà è una D2D1_VECTOR_2F definita 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 questo valore 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 capovolgimento e/o rotazione da eseguire sull'immagine. Per altre info, 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 punto singolo 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'interfaccia IWICBitmapScaler . Non genera un mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR Genera la 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 Valore predefinito. 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 90 gradi e la capovolge orizzontalmente.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270 Ruota l'immagine in senso orario 270 gradi.

Questo frammento di codice illustra come convertire 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 premultiplied.
D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT L'output dell'effetto usa alfa dritto.

Commenti

Per ottimizzare le prestazioni quando si usa WIC e Direct2D insieme, è consigliabile usare IWICFormatConverter per convertire 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 o l'immagine fornisce solo 8 bpc precisione e pertanto è necessario convertire in GUID_WICPixelFormat32bppPBGRA. Tuttavia, se si vuole sfruttare una precisione aggiuntiva fornita da un'immagine (ad esempio, un file JPEG-XR o TIFF archiviato con precisione superiore a 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 premultiplied

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 ogni 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 tornare al dispositivo WARP per supportare la precisione elevata.

Requisiti

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
Libreria d2d1.lib, dxguid.lib

ID2D1Effect