PALETTE
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgPalette
- 最后更新: 2022-10-17
自定义调色板颜色模式中的颜色
语法
Palette [Get] [index, color]
Palette [Get] [index, r, g, b]
Palette [Get] Using arrayname(idx)参数
Get
表示获取调色板信息而非设置调色板信息
index
调色板索引
color
颜色属性
r
红色分量
g
绿色分量
b
蓝色分量
Using
表示使用颜色值数组
arrayname(idx)
用于获取/设置颜色属性的数组和索引
说明
Palette 语句用于检索或自定义颜色深度不超过 8bpp 的图形模式的当前调色板;在颜色深度更高的模式下使用 Palette 将不起作用。调用不带参数的 Palette 会恢复 Screen (Graphics) 语句设置的当前图形模式的默认调色板。
当 Screen 模式初始化时,GfxLib 会设置默认调色板。
如果指定了 index 和 color,这些取决于当前模式:
| 屏幕模式 | index 范围 | color 范围 |
|---|---|---|
| 1 | 0-3 | 0-15 |
| 2 | 0-1 | 0-15 |
| 7,8 | 0-15 | 0-15 |
| 9 | 0-15 | 0-63 |
| 11 | 0-1 | 见下 |
| 12 | 0-15 | 见下 |
| 13 到 21 | 0-255 | 见下 |
在屏幕模式 1、2、7、8 和 9 中,可以将每个颜色索引分配给可用范围内的一种颜色。在其他屏幕模式中,颜色必须以 &hBBGGRR 的形式指定,其中 BB、GG 和 RR 是蓝色、绿色和红色分量,十六进制范围 &h0-&h3F(十进制 0-63)。如果不喜欢十六进制形式,可以使用以下公式计算传递给此参数的整数值:
color = red or (green shl 8) or (blue shl 16)
其中红色、绿色和蓝色必须在 0-63 范围内。请注意,Palette 接受的颜色值与 RGB 宏返回的格式不同(红色和蓝色字段相反,范围不同);这是为了与 QB 向后兼容。
在第二种形式中,通过调用带 4 个参数的 Palette 直接指定调色板条目的红色、绿色和蓝色分量。在这种情况下,r、g 和 b 必须在 0-255 范围内。
调用 Palette Using 允许一次设置一组颜色值;应传递一个数组,其中包含足够数量的元素,等于当前图形模式颜色深度可用的颜色索引数(1bpp 为 2,2bpp 为 4,4bpp 为 16,8bpp 为 256)。数组元素必须是上述格式的整数颜色值。从给定 idx 索引开始存储在 arrayname 中的颜色将从索引 0 开始分配给每个调色板索引。
第 1 和第 3 种形式是为与 QB 向后兼容;第 2 种形式旨在简化调色板处理。对调色板的任何更改都会立即在屏幕上显示。
如果指定了 Get 选项,Palette 将检索而不是设置当前调色板的颜色值。参数含义与所使用的形式相同,但在这种情况下,颜色、r、g 和 b 必须是按引用传递的变量,函数退出时将保存颜色 RGB 值。
示例
start GeSHi
' Setting a single color, form 1.
Screen 15
Locate 1,1: Color 15
Print "Press any key to change my color!"
Sleep
' Now change color 15 hues to bright red
Palette 15, &h00003F
Sleepend GeSHi
start GeSHi
' Getting a single color, form 2.
Dim As ulong r, g, b
Screen 13
Palette Get 32, r, g, b
Print "Color 32 hues:"
Print Using "Red:### Green:### Blue:###"; r; g; b
Sleepend GeSHi
start GeSHi
' Getting whole palette, form 3.
Dim pal(0 To 255) As ulong
Screen 13
Palette Get Using pal
For i As Integer = 0 To 15
Print Using "Color ## = &"; i; Hex(pal(i), 6)
Next i
Sleepend GeSHi
与 QB 的区别
- QBasic 不支持 PALETTE GET 来检索调色板。
- QBasic 不允许传递单独的红/绿/蓝值。
另请参阅
返回 目录