Dela via


Logisk palett

En logisk palett är en färgpalett som ett program skapar och associerar med en viss enhetskontext. Med logiska paletter kan program definiera och använda färger som uppfyller deras specifika behov. Program kan skapa valfritt antal logiska paletter, använda dem för separata enhetskontexter eller växla mellan dem för en enda enhetskontext. Det maximala antalet paletter som ett program kan skapa beror på systemets resurser.

Ett program skapar en logisk palett med hjälp av funktionen CreatePalette. Programmet fyller en LOGPALETTE- struktur, som anger antalet poster och färgvärdena för varje post, och sedan skickar programmet strukturen till CreatePalette. Funktionen returnerar ett paletthandtag som programmet använder i alla efterföljande åtgärder för att identifiera paletten. Om du vill använda färger i den logiska paletten väljer programmet paletten i en enhetskontext genom att använda funktionen SelectPalette och sedan realiserar paletten med hjälp av funktionen RealizePalette. Färgerna i paletten är tillgängliga så snart den logiska paletten har realiserats.

Ett program bör begränsa storleken på sina logiska paletter till precis tillräckligt många poster för att representera de färger som behövs. Program kan inte skapa logiska paletter som är större än den maximala palettstorleken, ett enhetsberoende värde. Program kan få maximal storlek med hjälp av funktionen GetDeviceCaps för att hämta SIZEPALETTE-värdet.

Även om ett program kan ange valfritt färgvärde för en viss post i en logisk palett, kan inte alla färger genereras av den angivna enheten. Systemet ger inget sätt att identifiera vilka färger som stöds, men programmet kan identifiera det totala antalet av dessa färger genom att hämta enhetens färgupplösning. Färgupplösningen, som anges i färgbitar per pixel, är lika med det COLORRES-värde som returneras av funktionen GetDeviceCaps. En enhet som har en färgupplösning på 18 har 262 144 möjliga färger. Om ett program begär en färg som inte stöds väljer systemet en lämplig uppskattning.

När en logisk palett har skapats kan ett program ändra färger på paletten med hjälp av funktionen SetPaletteEntries. Om den logiska paletten har valts och realiserats påverkar det inte omedelbart de färger som visas när du ändrar paletten. Programmet måste använda funktionerna UnrealizeObject och RealizePalette för att uppdatera färgerna. I vissa fall kan programmet behöva avmarkera, orealisera, välja och realisera den logiska paletten för att säkerställa att färgerna uppdateras exakt enligt begäran. Om ett program väljer en logisk palett i mer än en enhetskontext påverkar ändringar i den logiska paletten alla enhetskontexter som det är valt för.

Ett program kan ändra antalet poster i en logisk palett med hjälp av funktionen ResizePalette. Om programmet minskar storleken ändras de återstående posterna. Om programmet utökar storleken anger systemet färgen för varje ny post till svart (0, 0, 0) och flaggan till noll.

Ett program kan hämta färg- och flaggvärdena för poster i en viss logisk palett med hjälp av funktionen GetPaletteEntries. Ett program kan hämta indexet för posten i en viss logisk palett som bäst matchar ett angivet färgvärde med hjälp av funktionen GetNearestPaletteIndex.

När ett program inte längre behöver en logisk palett kan det ta bort det med hjälp av funktionen DeleteObject. Programmet måste se till att den logiska paletten inte längre är markerad i en enhetskontext innan du tar bort paletten.