Axiom Справочник языка

Оператор

Оператор PALETTE

Пиксели графического экрана хранят не готовый цвет, а номер в палитре, и видимый оттенок определяет сама палитра. Оператор PALETTE задаёт этот видимый цвет для выбранного индекса, поэтому цветовую схему можно сменить, не перерисовывая изображение.

Массивный аргумент-имя записывается с обязательными квадратными скобками [], например PALETTE USING colors[].

Зачем переназначать палитру

Переназначение меняет вид уже нарисованного изображения без повторного рисования его пикселей. Так можно переключить цветовую схему, выделить объект или временно изменить цвета, а затем восстановить стандартную палитру.

Оператор требует графического режима SCREEN 1..10. Для полноцветного холста CANVAS используется RGB: его цвета задаются непосредственно и не переназначаются оператором PALETTE.

Синтаксис

PALETTE
PALETTE <индекс>, <цвет>
PALETTE USING <массив>

Три формы решают разные задачи: первая сбрасывает палитру, вторая меняет один индекс, третья читает набор цветов из массива.

Аргументы

ЧастьОписание
<индекс>Передайте индекс палитры, который оператор PALETTE должен переназначить. Значение приводится к целому и нормализуется по правилу ABS(value) MOD 256.
<цвет>Передайте новый видимый цвет для указанного индекса. Значение приводится к целому и нормализуется по тому же правилу ABS(value) MOD 256.
<массив>Передайте одномерный числовой массив. Видимые элементы массива задают цвета для индексов палитры, начиная с индекса 0.

Что делает каждая форма

Вызов без аргументов восстанавливает стандартную палитру Axiom для текущего экрана. Форма с двумя аргументами задаёт новый видимый цвет для одного индекса. Форма USING последовательно задаёт цвета из одномерного числового массива.

Индекс и цвет отдельного переназначения приводятся к INTEGER. PALETTE USING принимает выделенный одномерный массив с элементами INTEGER, LONG, DOUBLE или DECIMAL. Вещественные элементы сначала усекаются к целому; результат должен помещаться в INTEGER. Не выделенный массив сообщает MB3005, переполнение при приведении сообщает MB3008.

Индексы, массив и сохранение состояния

Первый видимый элемент массива задаёт индекс 0, второй — индекс 1. Нижняя граница массива не влияет на нумерацию индексов палитры. Из массива читаются не более 256 видимых элементов; если элементов меньше, цвета остальных индексов сохраняются, а элементы сверх первых 256 не используются.

После приведения к целому цвета и индексы нормализуются по правилу ABS(value) MOD 256; это же правило применяется к элементам массива.

Смена палитры сохраняет графическую позицию, настройки VIEW, WINDOW и VIEW PRINT, текстовый курсор и состояние мыши. Сохранённые в пикселях индексы при этом не изменяются: после рисования цветом 1 и вызова PALETTE 1, 196 изображение имеет вид цвета 196, но POINT(x, y) возвращает 1.

Если графический экран не открыт, выполнение завершается диагностикой MB3010.

Пример

SCREEN 1
LINE (20, 40)-(180, 40), 1
PRINT POINT(20, 40)

PALETTE 1, 196
PRINT POINT(20, 40)

PALETTE
PRINT POINT(20, 40)

Каждый вызов функции POINT печатает 1: меняется только отображение пикселя. Переназначение и последующий сброс палитры не затрагивают сохранённый индекс.

Пример PALETTE USING

SCREEN 1
DIM colors[0 TO 2] AS INTEGER
colors[0] = 16
colors[1] = 196
colors[2] = 46

LINE (20, 40)-(180, 40), 1
PRINT POINT(20, 40)

PALETTE USING colors[]
PRINT POINT(20, 40)

Массив задаёт цвета индексов 0, 1 и 2. Нарисованная линия продолжает хранить индекс 1.

Диагностика

  • MB3010: графический режим SCREEN не активен.
  • MB3005: массив для PALETTE USING объявлен, но ещё не выделен.
  • MB2003: форма PALETTE USING получила не одномерный числовой массив.

Запускаемые примеры

Программы из каталога samples/operators/palette/ проверяют отдельное переназначение, форму USING и восстановление палитры.

См. также