Spec-Zone .ru
спецификации, руководства, описания, API
|
Содержание | Предыдущий | Следующий |
Java 2D™ API улучшает графику, текст, и возможности обработки изображений Абстрактного Инструментария Работы с окнами (AWT), включая разработке более богатых пользовательских интерфейсов и новым типам приложений Java™.
Наряду с этой более богатой графикой, шрифтом, и API изображения, Java 2-D API поддерживает улучшенное цветное определение и состав, обнаружение хита на произвольных геометрических формах и тексте, и универсальной модели рендеринга для принтеров и дисплеев.
Java 2-D API также включает созданию усовершенствованных графических библиотек, таких как библиотеки CAM CAD и графика или отображающий библиотеки спецэффектов, так же как создание фильтров чтения-записи файла изображения и графического файла.
Когда использующийся в соединении с Платформой Носителей Java и другими API Носителей Java, Java 2-D API могут использоваться, чтобы создать и вывести на экран анимации и другие мультимедийные представления. Анимация Java и API Платформы Носителей Java полагаются на Java 2-D API для того, чтобы представить поддержку.
Ранние версии AWT, обеспеченного простой пакет рендеринга, подходящий для того, чтобы он представил общие страницы HTML, но не достаточно полнофункциональный для сложной графики, текста, или отобразил. Как упрощенный пакет рендеринга, ранний AWT воплощенные конкретные случаи более общих понятий рендеринга. Java 2D™ API обеспечивает более гибкий, полнофункциональный пакет рендеринга, разворачивая AWT, чтобы поддерживать более общую графику и представляя операции.
Например, через Graphics
class можно потянуть прямоугольники, овалы, и многоугольники. Graphics2D
улучшает понятие геометрического рендеринга, обеспечивая механизм для того, чтобы он представил фактически любую геометрическую форму. Точно так же с Java 2-D API можно провести разработанные линии любого width и заполнить геометрические формы фактически любой текстурой.
Геометрические формы обеспечиваются посредством реализаций Shape
интерфейс, например Rectangle2D
и Ellipse2D
. Кривые и дуги являются также определенными реализациями Shape
.
Заполнитесь и перьевые стили обеспечиваются посредством реализаций Paint
и Stroke
интерфейсы, например BasicStroke
, GradientPaint
, TexturePaint
, и Color
.
AffineTransform
определяет линейные преобразования 2-D координат, включая масштаб, преобразуйте, вращайтесь, и сдвиг.
Области клипа определяются теми же самыми реализациями Shape
интерфейс, которые используются, чтобы определить общие области отсечения, например Rectangle2D
и GeneralPath
.
Цветной состав обеспечивается реализациями Composite
интерфейс, например AlphaComposite
.
A Font
определяется наборами Glyphs
, которые поочередно определяются человеком Shapes
.
Основная модель рендеринга графики не изменилась с добавлением Java 2D™ API. Чтобы представить графику, Вы устанавливаете графический контекст и вызываете метод рендеринга на Graphics
объект.
Java 2-D API class Graphics2D
расширяется Graphics
поддерживать больше графических атрибутов и обеспечить новые методы рендеринга. Установка a Graphics2D
контекст описывается в “Рендеринге с Graphics2D” на странице 15.
Java 2-D API автоматически компенсирует различия в рендеринге устройств и обеспечивает универсальную модель рендеринга через различные типы устройств. На уровне приложения процесс рендеринга является тем же самым, является ли целевое устройство рендеринга дисплеем или принтером.
С JavaTM 2 SDK, версия 1.3 relsease и позже, Java 2-D API оказывает поддержку для многоэкранных сред. См. Раздел 1.2.1, "Системы координат" и “Представляющий в Многоэкранной Среде” на странице 39 для получения дополнительной информации.
Java 2-D API поддерживает две системы координат:
Java 2-D система автоматически выполняет необходимые преобразования между пространством пользователя и пространством устройства целевого устройства рендеринга. Хотя система координат для монитора очень отличается от системы координат для принтера, эти различия невидимы для приложений.
Как показано в рисунке 1-1, источник пространства пользователя располагается в верхнем левом углу пространства со значениями x, увеличивающимися направо и значениями y, увеличивающимися вниз.
Пространство пользователя представляет универсальную абстракцию всех возможных систем координат устройства. У пространства устройства для определенного устройства могли бы быть тот же самый источник и направление как пространство пользователя, или это могло бы отличаться. Независимо, координаты пространства пользователя автоматически преобразовываются в соответствующее пространство устройства, когда графический объект представляется. Часто, базовые драйверы устройств платформы используются, чтобы выполнить это преобразование.
2-D API Java определяет три уровня конфигурационной информации, которые сохраняются, чтобы поддерживать преобразование от пространства пользователя до пространства устройства. Эта информация инкапсулируется тремя классами:
Между ними, GraphicsEnvironment
, GraphicsDevice
, и GraphicsConfiguration
представьте всю информацию, необходимую для того, чтобы определить местоположение устройства рендеринга или шрифта на платформе Java и для того, чтобы преобразовать координаты от пространства пользователя до пространства устройства. Приложение может получить доступ к этой информации, но не должно выполнить преобразования между пространством пользователя и пространством устройства.
GraphicsEnvironment
описывает набор рендеринга устройств, видимых к приложению Java на определенной платформе. Представляющие устройства включают экраны, принтеры, и отображают буферы. GraphicsEnvironment
также включает список всех доступных шрифтов на платформе.
A GraphicsDevice
описывает видимое приложением устройство рендеринга, такое как экран или принтер. Каждая возможная конфигурация устройства представляется a GraphicsConfiguration
. Например, дисплей SVGA может работать в нескольких режимах: 640x480x16 цвета, 640x480x256 цвета, и 800x600x256 цвета. Экран SVGA представляется a GraphicsDevice
возразите и каждый из режимов представляется a GraphicsConfiguration
объект.
A GraphicsEnvironment
может содержать один или больше GraphicsDevices
; поочередно, каждый GraphicsDevice
может иметь один или больше GraphicsConfigurations
.
У Java 2-D API есть объединенная координатная модель преобразования. Все координатные преобразования, включая преобразования от пользователя к пространству устройства, представляются AffineTransform
объекты. AffineTransform
определяет правила для того, чтобы управлять координатами, используя матрицы.
Можно добавить AffineTransform
к графическому контексту, чтобы вращаться, масштабируйте, преобразуйте, или сдвиньте геометрическую форму, текст, или изображение, когда это представляется. Добавленное преобразование применяется к любому графическому объекту, представленному в том контексте. Преобразование выполняется, когда координаты пространства пользователя преобразовываются в координаты пространства устройства.
Строка обычно думается с точки зрения символов, которые включают строку. Когда строка оттягивается, ее появление определяется шрифтом, который выбирается. Однако, формы, что использование шрифта, чтобы вывести на экран строку не всегда соответствует отдельным символам. Например, в профессионале, публикующем, определенные комбинации двух или больше символов часто заменяются единственной формой, названной лигатурой.
Формы, которые шрифт использует, чтобы представить символы в строке, вызывают глифами. Шрифт мог бы представить символ, такой как нижний регистр острое использующее кратное число глифы, или представить определенные символьные комбинации, такие как fi в финале с единственным глифом. В Java 2-D API глиф просто a Shape
этим можно управлять и представлено таким же образом как любой другой Shape
.
Шрифт может считаться набором глифов. У единственного шрифта могло бы быть много версий, такой как тяжелые, средние, наклонные, готические, и регулярные. Эти различные версии вызывают поверхностями. Все поверхности в шрифте имеют подобный типографский проект и могут быть распознаны как элементы того же самого семейства. Другими словами набор глифов с определенным стилем формирует поверхность шрифта, набор поверхностей шрифта формирует семейство шрифтов, и набор семейств шрифтов формирует набор шрифтов, доступных в пределах детали GraphicsEnvironment
.
В Java 2-D API шрифты определяются именем, которое описывает определенную поверхность шрифта — например, Полужирный Helvetica. Это отличается от JDK 1.1 программных обеспечения, в которых шрифты описываются логическими именами, которые отображаются на различные поверхности шрифта, в зависимости от которых поверхности шрифта доступны на определенной платформе. Для обратной совместимости Java 2-D API поддерживает спецификацию шрифтов логическим именем так же как именем поверхности шрифта.
Используя Java 2-D API, можно составить и представить строки, которые содержат многократные шрифты различных семейств, поверхностей, размеров, и даже языков. Появление текста сохраняется логически отдельным от расположения текста. Font
объекты используются, чтобы описать появление, и информация расположения хранится в TextLayout
и TextAttributeSet
объекты. Разделение шрифта и информации о расположении облегчает использовать те же самые шрифты в различных конфигурациях расположения.
Изображения являются наборами пикселей, организованных пространственно. Пиксель определяет появление изображения в единственном расположении дисплея. Двумерный массив пикселей вызывают растром.
Появление пикселя может быть определено непосредственно или как индексирование в таблицу цветов для изображения.
В изображениях, которые содержат много цветов (больше чем 256), пиксели обычно непосредственно представляют цвет, альфу, и другие характеристики дисплея для каждого расположения на экране. Такие изображения имеют тенденцию быть намного больше чем индексированные цветные изображения, но они выглядят более реалистичными.
В индексированном цветном изображении цвета в изображении ограничиваются цветами, определенными в таблице цветов, часто приводящей к меньшему количеству цветов, которые могут использоваться в изображении. Однако, индексирование обычно требует меньшего пространства памяти чем значение цвета так изображения, сохраненные, поскольку ряд индексированных цветов обычно меньше. Этот пиксельный формат популярен для изображений, которые содержат только 16 или 256 цветов.
У изображений в Java 2-D API есть два основных компонента:
Правила для того, чтобы интерпретировать пиксель инкапсулируются a ColorModel
объект — например, должны ли значения быть интерпретированы как прямые или индексированные цвета. Для пикселя, который будет выведен на экран, это должно быть соединено с цветовой моделью.
Полоса является одним компонентом цветового пространства для изображения. Например, Красные, Зеленые, и Синие компоненты являются полосами в изображении RGB. Пиксель в прямом изображении цветовой модели может считаться набором значений полосы для единственного расположения на экране.
java.awt.image
пакет содержит несколько ColorModel
реализации, включая тех для упакованного и компонентных пиксельных представлений.
A ColorSpace
объект инкапсулирует правила, которые управляют, как ряд числовых измерений соответствует определенному цвету. ColorSpace
реализации в java.awt.color
представьте самые популярные цветовые пространства, включая RGB и шкалу полутонов. Отметьте, что цветовое пространство не является набором цветов — оно определяет правила для того, как интерпретировать отдельные значения цвета.
Разделение цветового пространства от цветовой модели обеспечивает большую гибкость в том, как цвета представляются и преобразовываются от одного цветного представления до другого.
С Java 2-D API можно представить Shapes
использование различных перьевых стилей и образцов заливки. Поскольку текст в конечном счете представляется рядом глифов, текстовые строки могут также перечеркнуться и заполнены.
Перьевые стили определяются объектами, которые реализуют Stroke
интерфейс. Штрихи позволяют Вам определить различные ширины и образцы подчеркивания штриховой линией для строк и кривых.
Образцы заливки определяются объектами, которые реализуют Paint
интерфейс. Color
class, который был доступен в более ранних версиях AWT, является простым типом Paint
объект, используемый, чтобы определить заливки чистого цвета. Java 2-D API обеспечивает два дополнительный Paint
реализации, TexturePaint
и GradientPaint
. TexturePaint
определяет образец заливки, используя простой фрагмент изображения, который повторяется однородно. GradientPaint
определяет образец заливки как градиент между двумя цветами.
В 2-D Java, представляя схему формы и заполняя форму образцом две отдельных операции:
draw
методы представляют контур формы или схему, используя перьевой стиль, определенный Stroke
атрибут и образец заливки, определенный Paint
атрибут.fill
метод заполняет внутреннюю часть формы с образцом, определенным Paint
атрибут.Когда текстовая строка представляется, ток Paint
атрибут применяется к глифам, которые формируют строку. Отметьте, однако, это drawString
фактически заполняет глифов, которые представляются. Чтобы перечеркнуть схемы глифов в текстовой строке, Вы должны получить схемы и представить их как формы, используя draw
метод.
Когда Вы представляете объект, который перекрывает существующий объект, Вы должны определить, как объединить цвета нового объекта с цветами, которые уже занимают область, куда Вы собираетесь потянуть. 2-D API Java инкапсулирует правила для того, как объединить цвета в a Composite
объект.
Примитивные системы рендеринга обеспечивают только основные Булевы операторы для того, чтобы они объединили цвета. Например, Булево правило составления композита могло бы позволить источнику и целевым значениям цвета быть ANDed, ORed, или XORed. Есть несколько проблем с этим подходом
2-D API Java избегает этих ловушек, реализовывая альфа-blending1 правила, которые принимают информацию о цветовой модели во внимание, составляя цвета. AlphaComposite
объект включает цветовую модель и источника и целевых цветов.
Java 2D™ API поддерживает обратную совместимость с JDK 1.1 программных обеспечения. Это также проектируется так, чтобы приложения могли поддержать независимость от платформы.
Чтобы гарантировать обратную совместимость, функциональность существующей графики JDK и классов обработки изображений и интерфейсов сохранялась. Существующие функции не были удалены, и никакие обозначения пакета не были изменены для существующих классов. 2-D API Java улучшает функциональность AWT, реализовывая новые методы в существующих классах, расширяя существующие классы, и добавляя новые классы и интерфейсы, которые не влияют на API наследства.
Например, большая часть Java 2-D функциональность API поставляется через расширенный графический контекст, Graphics2D
. Обеспечить этот расширенный графический контекст, поддерживая обратную совместимость, Graphics2D
расширяется Graphics
class от JDK 1.1 выпуска.
Модель использования графического контекста остается неизменной. AWT передает графический контекст к AWT Component
через следующие методы:
JDK 1.1 апплета интерпретируют графический контекст, в котором это передают как экземпляр Graphics
. Получить доступ к новым опциям, реализованным в Graphics2D,
Java 2-D совместимый с API апплет бросает графический контекст к a Graphics2D
объект:
В некоторых случаях, вместо того, чтобы расширить наследство class, Java 2-D API обобщает это. Два метода использовались, чтобы обобщить классы наследства:
Например, Java 2-D API обобщает AWT Rectangle
class используя оба из этих методов. Иерархия для прямоугольника теперь похожа:
java.lang.object | +-------java.awt.geom.RectangularShape | +---------java.awt.geom.Rectangle2D | +-------java.awt.Rectangle
В JDK 1.1 программных обеспечения, Rectangle
просто расширенный Object
. Это теперь расширяет новое Rectangle2D
class и реализации оба Shape
и Serializable
. Два родительских класса были добавлены к Rectangle
иерархия: RectangularShape
и Rectangle2D
. Апплеты, записанные для JDK, 1.1 программных обеспечения не сознают новые родительские классы и реализации интерфейса, но незатронуты потому что Rectangle
все еще содержит методы и элементы, которые присутствовали в более ранних версиях.
2-D API Java добавляет несколько новых классов и интерфейсов, которые являются "ортогональными" к API наследства. Эти дополнения не расширяют или обобщают существующие классы — они полностью новы и отличны. Эти новые классы и интерфейсы воплощают понятия, у которых не было никакого явного представления в API наследства.
Например, Java 2-D API реализует несколько новые Shape
классы, включая Arc2D
, CubicCurve2D
, и QuadCurve2D
. Хотя ранние версии AWT могли представить дуги, используя drawArc
и fillArc
методы, не было никакой общей абстракции кривой и никаких дискретных классов, которые воплотили дуги. Эти дискретные классы могли быть добавлены к Java 2-D API, не разрушая апплеты наследства потому что drawArc
и fillArc
все еще поддерживаются через Graphics
class.
Чтобы включить разработке независимых от платформы приложений, Java, 2-D API не делает предположений о разрешении, цветовом пространстве, или цветовой модели целевого устройства рендеринга. Ни делает Java, 2-D API принимает любой определенный формат файла изображения.
Действительно независимые от платформы шрифты возможны только, когда шрифты встроены (обеспеченный как часть программного обеспечения JDK), или когда они математически или программно сгенерированы. Java 2-D API в настоящий момент не поддерживает встроенные или математически сгенерированные шрифты, но он действительно включает программируемому определению всех шрифтов через их набор глифа. Каждый глиф может поочередно быть определен a Shape
это состоит из линейных сегментов и кривых. Много шрифтов определенных стилей и размеров могут быть получены из единственного набора глифа.
Java 2-D классы API организуется в следующие пакеты:
java.awt
java.awt.geom
java.awt.font
java.awt.color
java.awt.image
java.awt.image.renderable
java.awt.print
Пакет java.awt
содержит тех Java 2-D классы API и интерфейсы, которые носят общий характер или которые улучшают классы наследства. (Очевидно, не все классы в java.awt
Java 2-D классы.)
Пакет java.awt.geom
содержит классы и интерфейсы, связанные с определением геометрических примитивов:
Многие из геометрических примитивов имеют соответствующий .Float
и .Double
реализации. Это было сделано, чтобы включить и плаванию единственного - и реализациям двойной точности. Реализации двойной точности обеспечивают большую точность рендеринга за счет производительности на некоторых платформах.
Пакет java.awt.font
содержит классы и интерфейсы, используемые для текстового расположения и определения шрифтов:
Пакетjava.awt.color
содержит классы и интерфейсы для определения цветовых пространств и цветных профилей:
java.awt.image
и java.awt.image.renderable
пакеты содержат классы и интерфейсы для определения и рендеринга изображений:
Пакет java.awt.image
присутствовал в более ранних версиях AWT. Java 2-D API улучшает следующее наследство классы изображения AWT:
Эти классы цветовой модели остаются в java.awt.image
пакет для обратной совместимости. Чтобы поддержать непротиворечивость, новые классы цветовой модели также располагаются в java.awt.image
пакет.
Пакет java.awt.print
содержит классы и интерфейсы, которые позволяют печатать всего Java 2-D-на основе текст, графику, и изображения
Содержание | Предыдущий | Следующий |