Оператор
Оператор 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 и восстановление палитры.