Java 2D - Java 2D
Эта статья не цитировать любой источники.Май 2012 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
В вычисление, Java 2D является API для рисования двумерный графика с использованием Язык программирования Java. Каждую операцию 2D-рисования Java в конечном итоге можно рассматривать как начинка а форма используя краска и композитинг результат на экран.
Организация
Java 2D API и его документация доступны для загрузки как часть JDK 6. Классы Java 2D API организованы в следующие пакеты в JDK 6:
java.awt
Основной пакет для Java Набор инструментов для абстрактного окна.java.awt.geom
Стандартная библиотека Java для двухмерных геометрических фигур, таких как линии, эллипсы и четырехугольники.java.awt.font
Библиотека для управления глифы в Java.java.awt.color
Библиотека, посвященная множеству различных способов представления цвета.java.awt.image
Библиотека для работы с графическими изображениями.java.awt.print
Библиотека инструментов для письма на бумагу.
Базовые концепты
Эти объекты являются необходимой частью каждой операции 2D-рисования Java.
Формы
А форма в Java 2D - это граница, которая определяет внутреннее и внешнее. Пикселей внутри формы влияет операция рисования, а снаружи - нет.
Пытаясь заполнить прямой отрезок приведет к тому, что пиксели не будут затронуты, поскольку такая форма сама по себе не содержит пикселей. Вместо этого тонкий прямоугольник необходимо использовать так, чтобы фигура содержала несколько пикселей.
Краски
А краска генерирует цвета , который будет использоваться для каждого пикселя операции заливки. Самая простая краска - это java.awt.Color
, который создает одинаковый цвет для всех пикселей. Более сложные краски могут давать градиенты, изображений, или вообще любое сочетание цветов. Заполнение круглой формы желтым цветом приводит к сплошному желтому кругу, а заливка той же круглой формы с использованием краски, которая создает изображение, дает круглый вырез изображения.
Композиты
Во время любой операции рисования происходит источник (пиксели, создаваемые краской) и пункт назначения (пиксели уже на экране). Обычно исходные пиксели просто перезаписывают пиксели назначения, но составной позволяет изменить это поведение.
Композиция, учитывая исходный и целевой пиксели, дает окончательный результат, который в конечном итоге отображается на экране. Самый распространенный композит - это java.awt.AlphaComposite
, который может рассматривать нарисованные пиксели как частично прозрачные, так что целевые пиксели в некоторой степени видны.
Заполнение
К наполнять фигура, первый шаг - определить, какие пиксели попадают внутрь фигуры. На эти пиксели будет влиять операция заливки. Пиксели, которые частично находятся внутри и частично за пределами формы, могут быть затронуты в меньшей степени, если сглаживание включен.
Затем краске предлагается создать цвет для каждого из окрашиваемых пикселей. В обычном случае сплошной заливки каждый пиксель будет иметь один и тот же цвет.
Композиция берет пиксели, созданные краской, и объединяет их с пикселями, уже отображаемыми на экране, для получения окончательного результата.
Продвинутые объекты
Эти объекты можно рассматривать как выполняющие свои обязанности в терминах более простых объектов, описанных выше.
Преобразовать
Каждая операция Java 2D подлежит преобразовать, чтобы фигуры можно было перемещать, вращать, обрезать и масштабировать по мере их рисования. Активное преобразование чаще всего преобразование идентичности, который ничего не делает.
Заливку с использованием преобразования можно рассматривать как простое создание новой преобразованной формы с последующим заполнением этой формы.
Гладить
В добавок к наполнять операции, Java 2D предоставляет рисовать операция. Пока заливка рисует внутреннюю часть фигуры, рисование рисует ее контур. Контур может быть таким простым, как тонкая линия, или сложным, как пунктирная линия, с каждой чертой с закругленными краями.
За создание контура отвечает объект Инсульт. При заданной форме ввода обводка создает новую форму, представляющую ее контур. Например, бесконечно тонкий отрезок линии (без внутренней части) можно обвести в прямоугольник шириной в один пиксель.
Таким образом, операцию рисования можно описать как создание нового обведенного объекта с последующим заполнением этого объекта.
С технической точки зрения обводка требуется только для принятия введенной формы и создания новой формы. Реализация штриха, предоставляемая с Java 2D, реализует правила структуры, описанные выше, но пользовательский штрих может создать любую желаемую форму.
Оптимизация
Концептуально рисование прямой черной линии в Java 2D можно рассматривать как создание линейного сегмента, преобразование его в соответствии с текущим преобразованием, сглаживание его для создания тонкого прямоугольника, запрос этой формы для вычисления затронутых пикселей, создание пикселей с использованием java.awt.Color.BLACK
, а затем вывод результатов на экран.
Однако выполнение всей этой последовательности шагов для каждой операции рисования было бы очень неэффективным. Поэтому Java 2D оптимизирует стандартные операции рисования, поэтому многие из этих шагов можно пропустить. Например, если краска представляет собой простой сплошной цвет, на самом деле нет необходимости давать ей команду для создания списка окрашиваемых цветов. Точно так же, если используется полностью непрозрачный композит по умолчанию, фактический запрос на выполнение операции композитинга не нужен и приведет к потере усилий.
Java 2D выполняет минимальный объем работы, необходимой для его создания. казаться как будто он выполняет все эти шаги для каждой операции, сохраняя при этом большую гибкость и высокую производительность.
Пункт назначения
Для простоты в текстовых примерах, приведенных в этой статье, предполагается, что конечным устройством является экран. Однако местом назначения может быть что угодно, например, принтер, изображение в памяти или даже объект, который принимает команды 2D-графики Java и переводит их в векторная графика файлы изображений.
Совместимость Java2D / OpenGL
С Java SE 6, Java2D и OpenGL стали совместимыми, что позволяет, например, рисовать анимированную трехмерную графику вместо значков на кнопке (см. JOGL ).