Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации
Содержание | Предыдущий | Следующий

  Глава 1

Java 2DTM Краткий обзор 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 для того, чтобы представить поддержку.

1.1 Улучшенная Графика, текст, и Обработка изображений

Ранние версии 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.

1.2 Рендеринг Модели

Основная модель рендеринга графики не изменилась с добавлением 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 для получения дополнительной информации.

1.2.1 Системы координат

Java 2-D API поддерживает две системы координат:

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

1.2.1.1 Пространство пользователя

Как показано в  рисунке 1-1, источник пространства пользователя располагается в верхнем левом углу пространства со значениями x, увеличивающимися направо и значениями y, увеличивающимися вниз.

Предыдущий контекст описывает графику

Система координат Пространства пользователя рисунка 1-1

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

1.2.1.2 Пространство устройства

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.

1.2.2 Преобразовывает

У Java 2-D API есть объединенная координатная модель преобразования. Все координатные преобразования, включая преобразования от пользователя к пространству устройства, представляются AffineTransform объекты. AffineTransform определяет правила для того, чтобы управлять координатами, используя матрицы.

Можно добавить AffineTransform к графическому контексту, чтобы вращаться, масштабируйте, преобразуйте, или сдвиньте геометрическую форму, текст, или изображение, когда это представляется. Добавленное преобразование применяется к любому графическому объекту, представленному в том контексте. Преобразование выполняется, когда координаты пространства пользователя преобразовываются в координаты пространства устройства.

1.2.3 Шрифты

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

Формы, которые шрифт использует, чтобы представить символы в строке, вызывают глифами. Шрифт мог бы представить символ, такой как нижний регистр острое использующее кратное число глифы, или представить определенные символьные комбинации, такие как 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 объекты. Разделение шрифта и информации о расположении облегчает использовать те же самые шрифты в различных конфигурациях расположения.

1.2.4 Изображения

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

Появление пикселя может быть определено непосредственно или как индексирование в таблицу цветов для изображения.

В изображениях, которые содержат много цветов (больше чем 256), пиксели обычно непосредственно представляют цвет, альфу, и другие характеристики дисплея для каждого расположения на экране. Такие изображения имеют тенденцию быть намного больше чем индексированные цветные изображения, но они выглядят более реалистичными.

В индексированном цветном изображении цвета в изображении ограничиваются цветами, определенными в таблице цветов, часто приводящей к меньшему количеству цветов, которые могут использоваться в изображении. Однако, индексирование обычно требует меньшего пространства памяти чем значение цвета так изображения, сохраненные, поскольку ряд индексированных цветов обычно меньше. Этот пиксельный формат популярен для изображений, которые содержат только 16 или 256 цветов.

У изображений в Java 2-D API есть два основных компонента:

Правила для того, чтобы интерпретировать пиксель инкапсулируются a ColorModel объект — например, должны ли значения быть интерпретированы как прямые или индексированные цвета. Для пикселя, который будет выведен на экран, это должно быть соединено с цветовой моделью.

Полоса является одним компонентом цветового пространства для изображения. Например, Красные, Зеленые, и Синие компоненты являются полосами в изображении RGB. Пиксель в прямом изображении цветовой модели может считаться набором значений полосы для единственного расположения на экране.

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

A ColorSpace объект инкапсулирует правила, которые управляют, как ряд числовых измерений соответствует определенному цвету. ColorSpace реализации в java.awt.color представьте самые популярные цветовые пространства, включая RGB и шкалу полутонов. Отметьте, что цветовое пространство не является набором цветов — оно определяет правила для того, как интерпретировать отдельные значения цвета.

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

1.2.5 Заливки и Штрихи

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

Перьевые стили определяются объектами, которые реализуют Stroke интерфейс. Штрихи позволяют Вам определить различные ширины и образцы подчеркивания штриховой линией для строк и кривых.

Образцы заливки определяются объектами, которые реализуют Paint интерфейс. Color class, который был доступен в более ранних версиях AWT, является простым типом Paint объект, используемый, чтобы определить заливки чистого цвета. Java 2-D API обеспечивает два дополнительный Paint реализации, TexturePaint и GradientPaint. TexturePaint определяет образец заливки, используя простой фрагмент изображения, который повторяется однородно. GradientPaint определяет образец заливки как градиент между двумя цветами.

В 2-D Java, представляя схему формы и заполняя форму образцом две отдельных операции:

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

1.2.6 Составляет композит

Когда Вы представляете объект, который перекрывает существующий объект, Вы должны определить, как объединить цвета нового объекта с цветами, которые уже занимают область, куда Вы собираетесь потянуть. 2-D API Java инкапсулирует правила для того, как объединить цвета в a Composite объект.

Примитивные системы рендеринга обеспечивают только основные Булевы операторы для того, чтобы они объединили цвета. Например, Булево правило составления композита могло бы позволить источнику и целевым значениям цвета быть ANDed, ORed, или XORed. Есть несколько проблем с этим подходом

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

1.3 Обратная совместимость и Независимость от платформы

Java 2D™ API поддерживает обратную совместимость с JDK 1.1 программных обеспечения. Это также проектируется так, чтобы приложения могли поддержать независимость от платформы.

1.3.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 объект:

public void Paint (Graphics g) { 
 
        Graphics2D g2 = (Graphics2D) g; 
        ... 
        ... 
        g2.setTransform (t); 
} 

В некоторых случаях, вместо того, чтобы расширить наследство 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.

1.3.2 Независимость от платформы

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

Действительно независимые от платформы шрифты возможны только, когда шрифты встроены (обеспеченный как часть программного обеспечения JDK), или когда они математически или программно сгенерированы. Java 2-D API в настоящий момент не поддерживает встроенные или математически сгенерированные шрифты, но он действительно включает программируемому определению всех шрифтов через их набор глифа. Каждый глиф может поочередно быть определен a Shape это состоит из линейных сегментов и кривых. Много шрифтов определенных стилей и размеров могут быть получены из единственного набора глифа.

1.4 Java 2D™ Пакеты API

Java 2-D классы API организуется в следующие пакеты:

Пакет java.awt содержит тех Java 2-D классы API и интерфейсы, которые носят общий характер или которые улучшают классы наследства. (Очевидно, не все классы в java.awt Java 2-D классы.)

AlphaComposite
BasicStroke
Color
Composite
CompositeContext
Font
GradientPaint
Graphics2D
GraphicsConfiguration
GraphicsDevice
GraphicsEnvironment
Paint
PaintContext
Rectangle
Shape
Stroke
TexturePaint
Transparency

Пакет java.awt.geom содержит классы и интерфейсы, связанные с определением геометрических примитивов:

AffineTransform
Arc2D
Arc2D.Double
Arc2D.Float
Область
CubicCurve2D
CubicCurve2D.Double
CubicCurve2D.Float
Dimension2D
Ellipse2D
Ellipse2D.Double
Ellipse2D.Float
FlatteningPathIterator
GeneralPath
Line2D
Line2D.Double
Line2D.Float
PathIterator
Point2D
Point2D.Double
Point2D.Float
QuadCurve2D
QuadCurve2D.Double
QuadCurve2D.Float
Rectangle2D
Rectangle2D.Double
Rectangle2D.Float
RectangularShape
RoundRectangle2D
RoundRectangle2D.Double
RoundRectangle2D.Float
 
 

Многие из геометрических примитивов имеют соответствующий .Float и .Double реализации. Это было сделано, чтобы включить и плаванию единственного - и реализациям двойной точности. Реализации двойной точности обеспечивают большую точность рендеринга за счет производительности на некоторых платформах.

Пакет java.awt.font содержит классы и интерфейсы, используемые для текстового расположения и определения шрифтов:

FontRenderContext
GlyphJustificationInfo
GlyphMetrics
GlyphVector
GraphicAttribute
ImageGraphicAttribute
LineBreakMeasurer
LineMetrics
MultipleMaster
OpenType
ShapeGrapicAttribute
TextAttribute
TextHitInfo
TextLayout
TransformAttribute

Пакетjava.awt.color содержит классы и интерфейсы для определения цветовых пространств и цветных профилей:

ColorSpace
ICC_ColorSpace
ICC_Profile
ICC_ProfileGray
ICC_ProfileRGB
 

java.awt.image и java.awt.image.renderable пакеты содержат классы и интерфейсы для определения и рендеринга изображений:

AffineTransformOp
BandCombineOp
BandedSampleModel
BufferedImage
BufferedImageFilter
BufferedImageOp
ByteLookupTable
ColorConvertOp
ColorModel
ComponentColorModel
ComponentSampleModel
ConvolveOp
ContextualRenderedImageFactory
DataBuffer
DataBufferByte
DataBufferInt
DataBufferShort
DataBufferUShort
DirectColorModel
IndexColorModel
Kernel
LookupOp
LookupTable
MultiPixelPackedSampleModel
PackedColorModel
ParameterBlock
PixelInterleavedSampleModel
Raster
RasterOp
RenderableImage
RenderableImageOp
RenderableImageProducer
RenderContext
RenderedImageFactory
RenderedImage
RescaleOp
SampleModel
ShortLookupTable
SinglePixelPackedSampleModel
TileObserver
WritableRaster
WritableRenderedImage
 

Пакет java.awt.image присутствовал в более ранних версиях AWT. Java 2-D API улучшает следующее наследство классы изображения AWT:

Эти классы цветовой модели остаются в java.awt.image пакет для обратной совместимости. Чтобы поддержать непротиворечивость, новые классы цветовой модели также располагаются в java.awt.image пакет.

Пакет java.awt.print содержит классы и интерфейсы, которые позволяют печатать всего Java 2-D-на основе текст, графику, и изображения

Книга
Листаемый
PageFormat
Бумага
Печатаемый
PrinterGraphics
PrinterJob
 
 

1For подробная информация об альфа-смешивании, см. Раздел 17.6 из Компьютерной графики: Принципы и Практика. 2-ой редактор ДЖ.Д. Фоли, А. ван Дам, S.K. Feiner, J.F. Хьюз. Аддисон - Уэсли, 1990.

 


Содержание | Предыдущий | Следующий

Oracle и/или его филиалы Авторское право © 1993, 2012, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами