Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Funkcja Direct2D używa modelu kolorów RGB, w którym kolory są tworzone przez połączenie różnych wartości czerwonego, zielonego i niebieskiego. Czwarty składnik alfa mierzy przezroczystość piksela. W trybie Direct2D każdy z tych składników jest wartością zmiennoprzecinkową z zakresem [0.0 1.0]. W przypadku trzech składników kolorów wartość mierzy intensywność koloru. W przypadku składnika alfa wartość 0.0 oznacza całkowicie przezroczyste, a wartość 1.0 oznacza całkowicie nieprzezroczyste. W poniższej tabeli przedstawiono kolory uzyskane z różnych kombinacji intensywności 100%.
| Czerwony | Zielony | Niebieski | Kolor |
|---|---|---|---|
| 0 | 0 | 0 | Czarny |
| 1 | 0 | 0 | Czerwony |
| 0 | 1 | 0 | Zielony |
| 0 | 0 | 1 | Niebieski |
| 0 | 1 | 1 | Błękitny |
| 1 | 0 | 1 | Purpurowy |
| 1 | 1 | 0 | Żółty |
| 1 | 1 | 1 | Biały |
Wartości kolorów z zakresu od 0 do 1 powodują różne odcienie tych czystych kolorów. Funkcja Direct2D używa struktury D2D1_COLOR_F do reprezentowania kolorów. Na przykład poniższy kod określa magenta.
// Initialize a magenta color.
D2D1_COLOR_F clr;
clr.r = 1;
clr.g = 0;
clr.b = 1;
clr.a = 1; // Opaque.
Można również określić kolor przy użyciu klasy D2D1::ColorF, która pochodzi ze struktury D2D1_COLOR_F.
// Equivalent to the previous example.
D2D1::ColorF clr(1, 0, 1, 1);
Mieszanie alfa
Mieszanie alfa tworzy przezroczyste obszary przez połączenie koloru pierwszego planu z kolorem tła przy użyciu poniższej formuły.
- kolor = af * Cf + (1 - af) * Cb
gdzie Cb jest kolorem tła, Cf jest kolorem pierwszego planu, a af jest wartością alfa koloru pierwszego planu. Ta formuła jest stosowana parowo do każdego składnika koloru. Załóżmy na przykład, że kolor pierwszego planu to (R = 1,0, G = 0,4, B = 0,0), z alfa = 0,6, a kolor tła jest (R = 0,0, G = 0,5, B = 1,0). Kolor wynikowy po mieszaniu alfa to:
R = (1,0 * 0,6 + 0 * 0,4) = .6
G = (0,4 * 0,6 + 0,5 * 0,4) = .44
B = (0 * 0,6 + 1,0 * 0,4) = .40
Na poniższej ilustracji przedstawiono wynik tej operacji łączenia.
Formaty pikseli
Struktura D2D1_COLOR_F nie opisuje sposobu, w jaki piksel jest reprezentowany w pamięci. W większości przypadków nie ma to znaczenia. Funkcja Direct2D obsługuje wszystkie wewnętrzne szczegóły tłumaczenia informacji o kolorze na piksele. Może jednak być konieczne zapoznanie się z formatem pikseli, jeśli pracujesz bezpośrednio z mapą bitową w pamięci lub w przypadku łączenia funkcji Direct2D z funkcją Direct3D lub GDI.
Wyliczenie DXGI_FORMAT definiuje listę formatów pikseli. Lista jest dość długa, ale tylko kilka z nich ma zastosowanie do Direct2D. (Pozostałe są używane przez direct3D).
| Format pikseli | Opis |
|---|---|
|
DXGI_FORMAT_B8G8R8A8_UNORM |
Jest to najbardziej typowy format pikseli. Wszystkie składniki pikseli (czerwony, zielony, niebieski i alfa) to 8-bitowe liczby całkowite bez znaku. Składniki są rozmieszczone w kolejności BGRA w pamięci. (Zobacz ilustrację poniżej). |
|
DXGI_FORMAT_R8G8B8A8_UNORM |
Składniki pikseli to 8-bitowe liczby całkowite bez znaku w kolejności RGBA. Innymi słowy, czerwone i niebieskie składniki są zamieniane względem DXGI_FORMAT_B8G8R8A8_UNORM. Ten format jest obsługiwany tylko w przypadku urządzeń sprzętowych. |
|
DXGI_FORMAT_A8_UNORM |
Ten format zawiera 8-bitowy składnik alfa bez składników RGB. Jest to przydatne w przypadku tworzenia masek nieprzezroczystości. Aby dowiedzieć się więcej na temat używania masek przezroczystości w trybie Direct2D, zobacz Omówienie zgodnych z A8 celów renderowania. |
Na poniższej ilustracji przedstawiono układ pikseli BGRA.
Aby uzyskać format pikseli obiektu docelowego renderowania, wywołaj ID2D1RenderTarget::GetPixelFormat. Format pikseli może nie być zgodny z rozdzielczością ekranu. Na przykład ekran może być ustawiony na 16-bitowy kolor, mimo że obiekt docelowy renderowania używa koloru 32-bitowego.
Tryb alfa
Element docelowy renderowania ma również tryb alfa, który definiuje sposób traktowania wartości alfa.
| Tryb alfa | Opis |
|---|---|
| D2D1_ALPHA_MODE_IGNORE | Nie jest wykonywane łączenie alfa. Wartości alfa są ignorowane. |
| D2D1_ALPHA_MODE_STRAIGHT | Prosta alfa. Składniki kolorów piksela reprezentują intensywność koloru przed mieszaniem alfa. |
| D2D1_ALPHA_MODE_PREMULTIPLIED | Przemnożona alfa. Składniki koloru piksela reprezentują intensywność koloru pomnożona przez wartość alfa. Ten format jest bardziej wydajny do renderowania niż prosty alfa, ponieważ termin (af Cf) z formuły łączenia alfa jest wstępnie obliczany. Jednak ten format nie jest odpowiedni do przechowywania w pliku obrazu. |
Oto przykład różnicy między prostym alfa a przedmnożonym alfa. Załóżmy, że żądany kolor jest czysty czerwony (100% intensywności) z 50% alfa. Jako typ Direct2D ten kolor będzie reprezentowany jako (1, 0, 0, 0,0,5). Przy użyciu prostych alfa i przy założeniu 8-bitowych składników kolorów czerwony składnik piksela jest 0xFF. Przy użyciu premnożonej alfy, czerwony składnik jest skalowany tak, aby 50% z% równało się 0x80.
Typ danych D2D1_COLOR_F zawsze reprezentuje kolory przy użyciu prostej alfa. Direct2D konwertuje piksele na wstępnie sformatowany format alfa w razie potrzeby.
Jeśli wiesz, że program nie będzie obsługiwał mieszania alfa, utwórz docelowy obiekt renderowania przy użyciu trybu D2D1_ALPHA_MODE_IGNORE alfa. Ten tryb może zwiększyć wydajność, ponieważ funkcja Direct2D może pominąć obliczenia alfa. Aby uzyskać więcej informacji, zobacz Poprawianie wydajności aplikacji Direct2D.
Następny
Stosowanie przekształceń w Direct2D