Logische Palette

Eine logische Palette ist eine Farbpalette, die eine Anwendung erstellt und einem bestimmten Gerätekontext zu ordnet. Mit logischen Paletten können Anwendungen Farben definieren und verwenden, die ihren spezifischen Anforderungen entsprechen. Anwendungen können eine beliebige Anzahl logischer Paletten erstellen, indem sie sie für separate Gerätekontexte verwenden oder zwischen ihnen für einen einzelnen Gerätekontext wechseln. Die maximale Anzahl von Paletten, die eine Anwendung erstellen kann, hängt von den Ressourcen des Systems ab.

Eine Anwendung erstellt eine logische Palette mithilfe der CreatePalette-Funktion. Die Anwendung füllt eine LOGPALETTE-Struktur aus, die die Anzahl der Einträge und die Farbwerte für jeden Eintrag angibt. Anschließend übergibt die Anwendung die Struktur an CreatePalette. Die Funktion gibt ein Palettenhand handle zurück, das die Anwendung in allen nachfolgenden Vorgängen verwendet, um die Palette zu identifizieren. Um Farben in der logischen Palette zu verwenden, wählt die Anwendung die Palette mithilfe der SelectPalette-Funktion in einen Gerätekontext aus und realisiert dann die Palette mithilfe der Funktion RealizePalette. Die Farben in der Palette sind verfügbar, sobald die logische Palette realisiert wird.

Eine Anwendung sollte die Größe ihrer logischen Paletten auf ausreichend Einträge beschränken, um die erforderlichen Farben darstellen zu können. Anwendungen können keine logischen Paletten erstellen, die größer als die maximale Palettengröße ( ein geräteabhängiger Wert) sind. Anwendungen können die maximale Größe mithilfe der GetDeviceCaps-Funktion abrufen, um den SIZEPALETTE-Wert abzurufen.

Obwohl eine Anwendung einen beliebigen Farbwert für einen bestimmten Eintrag in einer logischen Palette angeben kann, können nicht alle Farben vom angegebenen Gerät generiert werden. Das System bietet keine Möglichkeit, zu ermitteln, welche Farben unterstützt werden, aber die Anwendung kann die Gesamtzahl dieser Farben ermitteln, indem die Farbauflösung des Geräts abgerufen wird. Die Farbauflösung, die in Farbbits pro Pixel angegeben wird, entspricht dem COLORRES-Wert, der von der GetDeviceCaps-Funktion zurückgegeben wird. Ein Gerät mit einer Farbauflösung von 18 verfügt über 262.144 mögliche Farben. Wenn eine Anwendung eine Farbe an fordert, die nicht unterstützt wird, wählt das System eine geeignete Näherung aus.

Sobald eine logische Palette erstellt wurde, kann eine Anwendung die Farben in der Palette mithilfe der SetPaletteEntries-Funktion ändern. Wenn die logische Palette ausgewählt und realisiert wurde, wirkt sich das Ändern der Palette nicht sofort auf die angezeigten Farben aus. Die Anwendung muss die Funktionen UnrealizeObject und RealizePalette verwenden, um die Farben zu aktualisieren. In einigen Fällen muss die Anwendung möglicherweise die Auswahl aufheben, die Umsetzung aufheben, die logische Palette auswählen und realisieren, um sicherzustellen, dass die Farben genau wie angefordert aktualisiert werden. Wenn eine Anwendung eine logische Palette in mehr als einem Gerätekontext auswählt, wirken sich Änderungen an der logischen Palette auf alle Gerätekontexte aus, für die sie ausgewählt ist.

Eine Anwendung kann die Anzahl der Einträge in einer logischen Palette mithilfe der ResizePalette-Funktion ändern. Wenn die Anwendung die Größe verringert, bleiben die verbleibenden Einträge unverändert. Wenn die Anwendung die Größe erweitert, legt das System die Farbe für jeden neuen Eintrag auf Schwarz (0, 0, 0) und das Flag auf 0 (null) fest.

Eine Anwendung kann die Farb- und Flagwerte für Einträge in einer bestimmten logischen Palette mithilfe der GetPaletteEntries-Funktion abrufen. Eine Anwendung kann den Index für den Eintrag in einer bestimmten logischen Palette abrufen, die einem angegebenen Farbwert am engsten entspricht, indem sie die GetGrammrestPaletteIndex-Funktion verwendet.

Wenn eine Anwendung keine logische Palette mehr benötigt, kann sie sie mithilfe der DeleteObject-Funktion löschen. Die Anwendung muss sicherstellen, dass die logische Palette nicht mehr in einem Gerätekontext ausgewählt ist, bevor die Palette gelöscht wird.