逻辑调色板

逻辑调色板 是应用程序创建并与给定设备上下文关联的调色板。 逻辑调色板允许应用程序定义和使用满足其特定需求的颜色。 应用程序可以创建任意数量的逻辑调色板,将其用于单独的设备上下文,或为单个设备上下文在它们之间切换。 应用程序可创建的最大调色板数取决于系统的资源。

应用程序使用 CreatePalette 函数创建逻辑调色板。 应用程序填充 LOGPALETTE 结构,该结构指定每个条目的条目数和颜色值,然后应用程序将结构传递给 CreatePalette。 该函数返回应用程序在所有后续作中用于标识调色板的调色板句柄。 若要在逻辑调色板中使用颜色,应用程序使用 SelectPalette 函数将调色板选入设备上下文,然后使用 RealizePalette 函数实现调色板。 实现逻辑调色板后,调色板中的颜色即可用。

应用程序应将逻辑调色板的大小限制为足以表示所需颜色的条目。 应用程序无法创建大于最大调色板大小(设备依赖值)的逻辑调色板。 应用程序可以使用 GetDeviceCaps 函数检索 SIZEPALETTE 值来获取最大大小。

尽管应用程序可以为逻辑调色板中的给定条目指定任何颜色值,但并非所有颜色都可以由给定设备生成。 系统不提供一种方法来发现支持哪些颜色,但应用程序可以通过检索设备的颜色分辨率来发现这些颜色的总数。 以每像素的颜色位指定的颜色分辨率等于 GetDeviceCaps 函数返回的 COLORRES 值。 颜色分辨率为 18 的设备具有 262,144 种可能的颜色。 如果应用程序请求不支持的颜色,系统将选择适当的近似值。

创建逻辑调色板后,应用程序可以使用 SetPaletteEntries 函数更改调色板中的颜色。 如果已选择并意识到逻辑调色板,则更改调色板不会立即影响显示的颜色。 应用程序必须使用 UnrealizeObjectRealizePalette 函数来更新颜色。 在某些情况下,应用程序可能需要取消选择、不实现、选择和实现逻辑调色板,以确保按照请求完全更新颜色。 如果应用程序将逻辑调色板选择到多个设备上下文中,则对逻辑调色板的更改会影响为其选择的所有设备上下文。

应用程序可以使用 ResizePalette 函数更改逻辑调色板中的条目数。 如果应用程序减小大小,则剩余的条目保持不变。 如果应用程序扩展大小,系统将每个新条目的颜色设置为黑色(0、0、0 和 0),并将标志设置为零。

应用程序可以使用 GetPaletteEntries 函数检索给定逻辑调色板中条目的颜色和标志值。 应用程序可以使用 GetNearestPaletteIndex 函数检索给定逻辑调色板中与指定颜色值最匹配的条目的索引。

当应用程序不再需要逻辑调色板时,可以使用 DeleteObject 函数将其删除。 在删除调色板之前,应用程序必须确保逻辑调色板不再选择到设备上下文中。