Dela via


Bitmappskällans effekt

Använd bitmappskällans effekt för att generera en ID2D1Image- från en IWICBitmapSource- för användning som indata i ett effektdiagram. Den här effekten utför skalning och rotation på processorn. Det kan också generera en mipmap för systemminne, vilket kan vara en prestandaoptimering för aktiv skalning av mycket stora bilder med olika reducerad upplösning.

Not

Bitmappskällans effekt tar indata som en egenskap, inte som en bildinmatning. Du måste använda metoden SetValue, inte metoden SetInput. Egenskapen WicBitmapSource är där du anger indata för avbildningen.

CLSID för den här effekten är CLSID_D2D1BitmapSource.

Effektegenskaper

Visningsnamn och indexuppräkning Beskrivning
WicBitmapSource
D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE
IWICBitmapSource som innehåller de bilddata som ska läsas in.
Typen är IWICBitmapSource.
Standardvärdet är NULL.
Skala
D2D1_BITMAPSOURCE_PROP_SCALE
Skalningsmängden i X- och Y-riktningen. Effekten multiplicerar bredden med X-värdet och höjden med Y-värdet. Den här egenskapen är en D2D1_VECTOR_2F definierad som: (X-skala, Y-skala). Skalningsbeloppen är FLOAT, enhetslösa och måste vara positiva eller 0.
Typen är D2D1_VECTOR_2F.
Standardvärdet är {1.0f, 1.0f}.
InterpolationMode.
D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE
Interpoleringsläget som används för att skala bilden. Mer information finns i interpoleringslägen.
Om läget inaktiverar mipmap cachelagrar BitmapSouce bilden enligt den upplösning som bestäms av egenskaperna Skala och EnableDPICorrection.
Typen är D2D1_BITMAPSOURCE_INTERPOLATION_MODE.
Standardvärdet är D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR.
EnableDPICorrection
D2D1_BITMAPSOURCE_PROP_ENABLE_DPI_CORRECTION
Om du anger TRUE skalas indataavbildningen för att konvertera DPI:n som rapporteras av IWICBitmapSource till enhetskontextens DPI. Effekten använder interpoleringsläget som du anger med egenskapen InterpolationMode. Om du ställer in detta på FALSE använder effekten en DPI på 96,0 för utdatabilden.
Typen är BOOL.
Standardvärdet är FALSE.
AlphaMode
D2D1_BITMAPSOURCE_PROP_ALPHA_MODE
Alfaläget för utdata. Detta kan vara antingen förmultiplied eller rakt. Mer information finns i Alfalägen.
Typen är D2D1_BITMAPSOURCE_ALPHA_MODE.
Standardvärdet är D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED.
Orientering
D2D1_BITMAPSOURCE_PROP_ORIENTATION
En vänd- och/eller rotationsåtgärd som ska utföras på bilden. Mer information finns i Orientering.
Typen är D2D1_BITMAPSOURCE_ORIENTATION.
Standardvärdet är D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT.

Interpoleringslägen

Effekten interpolerar med det här läget när den skalar en bild eller när den korrigerar DPI:t. De interpoleringslägen som den här effekten använder beräknas av processorn, inte GPU:n.

Namn Beskrivning
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_NEAREST_NEIGHBOR Exempel på den närmaste enskilda punkten och använder den. Genererar ingen mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR Använder ett fyrpunktsexempel och linjär interpolation. Genererar ingen mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_CUBIC Använder en 16-exempelkubik kernel för interpolering. Genererar ingen mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_FANT Använder WIC-fantinterpolation, samma som IWICBitmapScaler-gränssnittet. Genererar ingen mipmap.
D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR Genererar mipmap-kedja i systemminnet med hjälp av bilinearinterpolation. För varje mipmap skalas effekten till närmaste multipel av 0,5 med hjälp av bilinearinterpolation och skalar sedan den återstående mängden med linjär interpolation.

Orientering

Egenskapen Orientering kan användas för att använda en EXIF-orienteringsflagga som är inbäddad i en bild.

Namn Beskrivning
D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT Standard. Effekten ändrar inte indataorienteringen.
D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL Vänder bilden vågrätt.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180 Roterar bilden medsols 180 grader.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL Roterar bilden medsols 180 grader och vänder den vågrätt.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL Roterar bilden medsols 270 grader och vänder den vågrätt.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90 Roterar bilden medsols 90 grader.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL Roterar bilden medsols 90 grader och vänder den vågrätt.
D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270 Roterar bilden medsols 270 grader.

Det här kodfragmentet visar hur du konverterar från EXIF-orienteringsvärden (definierade i propkey.h) till D2D1_BITMAPSOURCE_ORIENTATION värden.

#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;
       }
}

Alfalägen

Namn Beskrivning
D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED Effektutdata använder premultiplied alfa.
D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT Effektutdata använder rak alfa.

Anmärkningar

Om du vill optimera prestanda när du använder WIC och Direct2D tillsammans bör du använda IWICFormatConverter för att konvertera till ett lämpligt pixelformat baserat på appens scenario och bildens interna precision.

I de flesta fall kräver antingen appens Direct2D- pipeline endast 8 bitar per kanal (bpc) precision, eller så ger bilden bara 8 bpc precision, och därför bör du konvertera till GUID_WICPixelFormat32bppPBGRA. Men om du vill dra nytta av extra precision som tillhandahålls av en bild (till exempel en JPEG-XR eller TIFF som lagras med större än 8 bpc precision), bör du använda ett RGBA-baserat pixelformat. Tabellen nedan innehåller mer information.

Önskad precision Bildens inbyggda precision Rekommenderat pixelformat
8 bitar per kanal <= 8 bitar per kanal GUID_WICPixelFormat32bppPBGRA
Så högt som möjligt <= 8 bitar per kanal GUID_WICPixelFormat32bppPBGRA
Så högt som möjligt > 8 bitar per kanal RGBA-kanalordning, förmultiplied alfa

Eftersom många bildformat stöder flera precisionsnivåer bör du använda IWICBitmapSource::GetPixelFormat för att hämta bildens interna pixelformat och sedan använda IWICPixelFormatInfo för att avgöra hur många bitar per kanal med precision som är tillgängliga för det formatet. Observera också att inte all maskinvara har stöd för pixelformat med hög precision. I sådana fall kan din app behöva återgå till WARP-enheten för att stödja hög precision.

Krav

Krav Värde
Lägsta klient som stöds Windows 8 och Platform Update för Windows 7 [skrivbordsappar | Windows Store-appar]
Lägsta server som stöds Windows 8 och Platform Update för Windows 7 [skrivbordsappar | Windows Store-appar]
Rubrik d2d1effects.h
Bibliotek d2d1.lib, dxguid.lib

ID2D1Effect