Skip to content

PALETTE


自定义调色板颜色模式中的颜色

语法

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 范围
10-30-15
20-10-15
7,80-150-15
90-150-63
110-1见下
120-15见下
13 到 210-255见下

在屏幕模式 12789 中,可以将每个颜色索引分配给可用范围内的一种颜色。在其他屏幕模式中,颜色必须以 &hBBGGRR 的形式指定,其中 BBGGRR 是蓝色、绿色和红色分量,十六进制范围 &h0-&h3F(十进制 0-63)。如果不喜欢十六进制形式,可以使用以下公式计算传递给此参数的整数值:

color = red or (green shl 8) or (blue shl 16)

其中红色、绿色和蓝色必须在 0-63 范围内。请注意,Palette 接受的颜色值与 RGB 宏返回的格式不同(红色和蓝色字段相反,范围不同);这是为了与 QB 向后兼容。

第二种形式

在第二种形式中,通过调用带 4 个参数的 Palette 直接指定调色板条目的红色、绿色和蓝色分量。在这种情况下,rgb 必须在 0-255 范围内。

第三种形式

调用 Palette Using 允许一次设置一组颜色值;应传递一个数组,其中包含足够数量的元素,等于当前图形模式颜色深度可用的颜色索引数(1bpp 为 2,2bpp 为 4,4bpp 为 16,8bpp 为 256)。数组元素必须是上述格式的整数颜色值。从给定 idx 索引开始存储在 arrayname 中的颜色将从索引 0 开始分配给每个调色板索引。

第 1 和第 3 种形式是为与 QB 向后兼容;第 2 种形式旨在简化调色板处理。对调色板的任何更改都会立即在屏幕上显示。

如果指定了 Get 选项,Palette 将检索而不是设置当前调色板的颜色值。参数含义与所使用的形式相同,但在这种情况下,颜色、rgb 必须是按引用传递的变量,函数退出时将保存颜色 RGB 值。

示例

start GeSHi

vb
' 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
Sleep

end GeSHi

start GeSHi

vb
' 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
Sleep

end GeSHi

start GeSHi

vb
' 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
Sleep

end GeSHi

与 QB 的区别

  • QBasic 不支持 PALETTE GET 来检索调色板。
  • QBasic 不允许传递单独的红/绿/蓝值。

另请参阅

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系