mapy bitowe Device-Independent
Mapa bitowa niezależna od urządzenia (DIB) zawiera tabelę kolorów . W tabeli kolorów opisano, jak wartości pikseli odpowiadają wartości kolorów RGB, które opisują kolory generowane przez emitowanie światła. W związku z tym DIB może osiągnąć odpowiedni schemat kolorów na dowolnym urządzeniu. DiB zawiera następujące informacje o kolorze i wymiarze:
- Format koloru urządzenia, na którym został utworzony prostokątny obraz.
- Rozdzielczość urządzenia, na którym został utworzony prostokątny obraz.
- Paleta urządzenia, na którym utworzono obraz.
- Tablica bitów, która mapuje czerwone, zielone, niebieskie ( RGB ) trojaczki do pikseli na prostokątnym obrazie.
- Identyfikator kompresji danych, który wskazuje schemat kompresji danych (jeśli istnieje) używany do zmniejszenia rozmiaru tablicy bitów.
Informacje o kolorze i wymiarze są przechowywane w strukturze BITMAPINFO, która składa się z struktury BITMAPINFOHEADER, po której następuje co najmniej dwie struktury RGBQUAD. Struktura BITMAPINFOHEADER określa wymiary prostokąta pikseli, opisuje technologię kolorów urządzenia i identyfikuje schematy kompresji używane do zmniejszenia rozmiaru mapy bitowej. Struktury RGBQUAD identyfikują kolory wyświetlane w prostokątze pikseli.
Istnieją dwie odmiany DIBs:
- Dolny DIB, w którym pochodzenie leży w lewym dolnym rogu.
- DiB z góry w dół, w którym pochodzenie leży w lewym górnym rogu.
Jeśli wysokość dib, jak wskazuje Height składowej nagłówka informacji mapy bitowej, jest wartością dodatnią, jest to diB dolna; jeśli wysokość jest wartością ujemną, jest to diB z góry w dół. Nie można skompresować dib od góry w dół.
Format koloru jest określony pod względem liczby płaszczyzn kolorów i bitów kolorów. Liczba płaszczyzn kolorów jest zawsze 1; liczba bitów kolorów wynosi 1 w przypadku monochromatycznych map bitowych, 4 dla map bitowych NVIDIA i 8, 16, 24 lub 32 dla map bitowych na innych urządzeniach kolorowych. Aplikacja pobiera liczbę bitów kolorów używanych przez określony wyświetlacz (lub drukarkę), wywołując funkcję GetDeviceCaps, określając BITSPIXEL jako drugi argument.
Rozdzielczość urządzenia wyświetlania jest określona w pikselach na miernik. Aplikacja może pobrać rozdzielczość poziomą ekranu wideo lub drukarkę, wykonując ten trzyetapowy proces.
- Wywołaj funkcję GetDeviceCaps, określając parametr HORZRES jako drugi argument.
- Wywołaj metodę GetDeviceCaps po raz drugi, określając parametr HORZSIZE jako drugi argument.
- Podziel pierwszą wartość zwracaną przez drugą zwracaną wartość.
Aplikacja może pobrać rozdzielczość pionową przy użyciu tego samego trzyetapowego procesu z różnymi parametrami: VERTRES zamiast HORZRES i VERTSIZE zamiast HORZSIZE.
Paleta jest reprezentowana przez tablicę RGBQUAD struktury, które określają czerwone, zielone i niebieskie składniki intensywności dla każdego koloru w palecie kolorów urządzenia wyświetlania. Każdy indeks kolorów w tablicy palety mapuje na określony piksel w regionie prostokątnym skojarzonym z mapą bitową. Rozmiar tej tablicy w bitach jest odpowiednikiem szerokości prostokąta w pikselach pomnożonego przez wysokość prostokąta w pikselach pomnożony przez liczbę bitów kolorów dla urządzenia. Aplikacja może pobrać rozmiar palety urządzenia, wywołując funkcję GetDeviceCaps, określając NUMCOLORS jako drugi argument.
System Windows obsługuje kompresję tablicy palety dla 8-bpp i 4-bpp dolnych baz danych. Te tablice można skompresować przy użyciu schematu kodowania długości przebiegu (RLE). Schemat RLE używa wartości 2-bajtowych, pierwszy bajt określający liczbę kolejnych pikseli używających indeksu kolorów i drugi bajt określający indeks. Aby uzyskać więcej informacji na temat kompresji mapy bitowej, zobacz opis BITMAPINFOHEADER, BITMAPFILEHEADER, BITMAPV4HEADERi struktur BITMAPV5HEADER.
Aplikacja może utworzyć dib z bazy danych DDB, inicjując wymagane struktury i wywołując funkcję GetDIBits. Aby określić, czy urządzenie obsługuje tę funkcję, wywołaj funkcję GetDeviceCaps, określając RC_DI_BITMAP jako flagę RASTERCAPS.
Aplikacja, która musi skopiować mapę bitową, może użyć TransparentBlt, aby skopiować wszystkie piksele w źródłowej mapie bitowej do docelowej mapy bitowej z wyjątkiem tych pikseli, które pasują do przezroczystego koloru.
Aplikacja może używać diB do ustawiania pikseli na urządzeniu wyświetlania przez wywołanie funkcji SetDIBitsToDevice lub funkcji StretchDIBits. Aby określić, czy urządzenie obsługuje funkcję SetDIBitsToDevice, wywołaj funkcję GetDeviceCaps, określając RC_DIBTODEV jako flagę RASTERCAPS. Określ RC_STRETCHDIB jako flagę RASTERCAPS, aby określić, czy urządzenie obsługuje StretchDIBits.
Aplikacja, która po prostu musi wyświetlić wcześniej istniejący diB, może użyć funkcji SetDIBitsToDevice. Na przykład aplikacja arkusza kalkulacyjnego może otwierać istniejące wykresy i wyświetlać je w oknie przy użyciu funkcji SetDIBitsToDevice. Aby wielokrotnie ponownie rysować mapę bitową w oknie, aplikacja powinna jednak używać funkcji BitBlt. Na przykład aplikacja multimedialna, która łączy animowaną grafikę z dźwiękiem, może skorzystać z wywołania funkcji BitBlt, ponieważ jest wykonywana szybciej niż SetDIBitsToDevice.