Оператор
Оператор SMOOTH
Готовый графический кадр часто выводится в область другого размера, и тогда ступенчатые края линий, окружностей, изображений и растрового текста становятся заметны. Оператор SMOOTH включает или отключает сглаживание такого кадра целиком, не меняя ни исходных пикселей, ни координат программы.
Что фильтруется
SMOOTH фильтрует весь кадр, а не отдельную фигуру или надпись: программа выбирает один режим для результата рисования. Фильтрация включается в момент, когда кадр показывается в области иного размера, поэтому сами нарисованные пиксели и координаты, которыми оперирует программа, остаются прежними.
Действие распространяется на обе графические поверхности — SCREEN и CANVAS. В текстовом режиме SCREEN 0 графический кадр не выводится, поэтому сглаживание там не применяется, а выбранный режим сохраняется для следующей графической поверхности.
Синтаксис
SMOOTH ONSMOOTH OFFЭто две отдельные формы одного оператора. После ключевого слова SMOOTH указывается ровно одно состояние.
Состояния ON и OFF
Состояние определяет, как читается цвет при выводе кадра в другом размере.
| Состояние | Значение |
|---|---|
ON | Включает билинейное смешивание соседних пикселей при выводе кадра в другом размере. |
OFF | Оставляет точечную выборку ближайшего исходного пикселя при изменении размера. Это состояние используется по умолчанию при каждом новом запуске программы. |
Когда изменение становится видимым
SMOOTH ON сразу обновляет способ показа уже опубликованного графического кадра. На CANVAS новый кадр, который программа ещё рисует и не показала оператором PRESENT, остаётся невидимым до публикации; текущий опубликованный кадр при этом переключается сразу. Обратный вызов SMOOTH OFF немедленно возвращает точечную выборку.
При изменении размера кадра среда применяет билинейную интерполяцию всего изображения и смешивает цвета соседних пикселей, в том числе пикселей текста и геометрии. Перемещение и изменение размера окна используют готовый кадр: операторы рисования программы при этом не выполняются повторно.
Правила работы и ограничения
- Оператор
SMOOTHможно выполнить до открытияSCREENилиCANVAS; выбранное состояние применяется к следующему графическому кадру. - Выбранное состояние сохраняется при переключении между
SCREENиCANVASи сбрасывается вOFFпри новом запуске программы. - Если размер кадра совпадает с размером области вывода, фильтрация не меняет пиксели.
- Билинейная интерполяция может смягчить мелкий текст и тонкие линии. При сильном уменьшении мелкие детали всё равно могут потеряться.
- Оператор
SMOOTHменяет только представление кадра. ФункцияPOINT(x, y)продолжает возвращать цвет логического пикселя.
Диагностика
MB1001: послеSMOOTHне указано состояние или указано неON/OFF. Допустимы ровно две формы:SMOOTH ONиSMOOTH OFF.MB1004: после состоянияONилиOFFпереданы лишние токены. После режима должен завершиться оператор.
Пример
' Включаем сглаживание готового кадра SCREEN.
SMOOTH ON
SCREEN 2
CLS
PSET (20, 20), 12
CIRCLE (220, 160), 60, 14
PRINT "POINT сохраняет логический цвет: "; POINT(20, 20)
SLEEPСглаживание включено до открытия экрана, поэтому применяется к первому же кадру. Последняя строка показывает, что чтение пикселя не зависит от фильтра: POINT возвращает цвет логического пикселя, а не смешанный цвет его отображения.
Запускаемый пример для изменения размера SCREEN находится в samples/operators/smooth/screen_resize.axm. Перемещение окна SCREEN 8 и переключение режима клавишами проверяет samples/operators/smooth/screen_move_resize.axm. Пример с переключением режима во время работы CANVAS доступен в samples/operators/smooth/canvas_resize.axm.