stringtranslate.com

Ява 2D

Java 2D — это API для рисования двумерной графики с использованием языка программирования Java . Любую операцию 2D - рисования Java в конечном итоге можно рассматривать как заполнение формы с помощью краски и композицию результата на экран .

Организация

Java 2D API и документация к нему доступны для загрузки как часть JDK 6. Классы Java 2D API в JDK 6 организованы в следующие пакеты:

Базовые концепты

Эти объекты являются необходимой частью каждой операции 2D-рисования Java.

Формы

Форма в Java 2D — это граница , которая определяет внутреннюю и внешнюю часть. Пиксели внутри фигуры затрагиваются операцией рисования, а пиксели снаружи — нет.

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

Краски

Краска генерирует цвета , которые будут использоваться для каждого пикселя операции заливки. Самая простая краска — , которая генерирует один и тот же цвет для всех пикселей. Более сложные краски могут создавать градиенты, изображения или любую комбинацию цветов. Заполнение круглой формы желтым цветом приводит к образованию сплошного желтого круга, а заполнение той же круглой формы краской, создающей изображение, создает круглый вырез изображения.java.awt.Color

Композиты

Во время любой операции рисования есть источник (пиксели, создаваемые краской) и пункт назначения (пиксели, уже находящиеся на экране). Обычно исходные пиксели просто перезаписывают целевые пиксели, но композит позволяет изменить это поведение.

Комбинация, учитывая исходные и целевые пиксели, дает конечный результат, который в конечном итоге отображается на экране. Наиболее распространенным композитом является java.awt.AlphaComposite, который может рассматривать рисуемые пиксели как частично прозрачные, так что целевые пиксели в некоторой степени просвечивают.

Наполнение

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

Затем краске предлагается сгенерировать цвет для каждого окрашиваемого пикселя. В обычном случае сплошной заливки каждому пикселю будет присвоен один и тот же цвет.

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

Расширенные объекты

Эти объекты можно рассматривать как выполняющие свои обязанности с точки зрения более простых объектов, описанных выше.

Трансформировать

Каждая 2D-операция Java подлежит преобразованию , поэтому фигуры можно перемещать, вращать, сдвигать и масштабировать во время рисования. Активное преобразование чаще всего является тождественным преобразованием , которое ничего не делает.

Заполнение с помощью преобразования можно рассматривать как простое создание новой трансформированной фигуры и последующее заполнение этой формы.

Гладить

Помимо операции заполнения , Java 2D предоставляет операцию рисования . В то время как fill рисует внутреннюю часть фигуры, draw рисует ее контур. Контур может быть простым, как тонкая линия, или сложным, как пунктирная линия, где каждое тире имеет закругленные края.

Объектом, ответственным за создание контура, является обводка . Учитывая входную форму, обводка создает новую фигуру, представляющую ее контур. Например, бесконечно тонкий сегмент линии (без внутренней части) можно превратить в прямоугольник шириной в один пиксель.

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

Технически говоря, штрих необходим только для того, чтобы принять входную форму и создать новую форму. Реализация обводки, поставляемая с Java 2D, реализует описанные выше правила контура, но написанная по индивидуальному заказу обводка может создавать любую желаемую форму.

Оптимизации

Концептуально рисование прямой черной линии в Java 2D можно рассматривать как создание сегмента линии, его преобразование в соответствии с текущим преобразованием, обводку его для создания тонкого прямоугольника, запрос этой формы для вычисления затронутых пикселей, генерацию пикселей с помощью java.awt.Color.BLACK, а затем выводим результаты на экран.

Однако выполнение всей этой последовательности шагов для каждой операции рисования было бы очень неэффективно. Таким образом, Java 2D оптимизирует общие операции рисования, так что многие из этих шагов можно пропустить. Например, если краска представляет собой простой сплошной цвет, нет необходимости давать ей команду генерировать список цветов, которые будут окрашены. Аналогично, если используется полностью непрозрачный композит по умолчанию, фактически запрашивать его выполнение операции композитинга не нужно и приведет к пустой трате усилий.

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

Место назначения

Для простоты в текстовых примерах, представленных в этой статье, предполагается, что целевым устройством является экран. Однако местом назначения может быть что угодно, например, принтер, изображение в памяти или даже объект, который принимает команды 2D-графики Java и преобразует их в файлы векторных графических изображений.

Совместимость Java2D/OpenGL

Начиная с Java SE 6 , Java2D и OpenGL стали совместимыми, что позволяет, например, рисовать анимированную 3D-графику вместо значков на кнопке (см. JOGL ).

Смотрите также

Рекомендации

Внешние ссылки