2016-08-16 3 views
-1

Есть ли способ визуализации объекта Graphics2D в другой объект Graphics2D. Not by turning one into an Image and drawing that, но как графические примитивы?Запись объекта Graphics2D в другой объект Graphics2D

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

Сохраняя все примитивы линии, тогда, когда я создаю окончательный файл SVG с объекта Graphics2D, он может увеличиться в 1000 раз, и это по-прежнему чистый рендер.

Есть ли способ сделать это?

+0

Можете ли вы представить образец своего кода о том, как вы рисуете 2D-фигуры? – Ishmael

+0

Это серия вызовов типа "graphic.fillOval (x, y, cx, cy);". Затем мне нужно отобразить этот графический объект в другой графический объект с заданным смещением. –

ответ

2

A Graphics2D - это раковина для команд рендеринга. Это never действует как источник, поскольку вы легко можете вывести из-за отсутствия каких-либо методов, которые бы дистанционно соответствовали этой цели (а именно, какие-либо методы, которые поддерживают , с использованием фактического содержимого графики).

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

Хотя, поскольку Graphics - это всего лишь абстрактный класс, вы можете создавать реализации, которые позволяют вам считывать содержимое, , но не через API Graphics2D. Его всегда специфически добавленная возможность через несвязанный API (например, BufferedImage).

Если ваша цель - создать SVG, есть векторные примитивы, которые вы могли бы использовать; theres целая куча подклассов java.awt.Shape, которую вы можете использовать для определения геометрии. Формы могут отображаться в Graphics2D или вы можете «пересекать» Shape с помощью getPathIterator() и выполнять любую операцию, в которой вы нуждаетесь.

Для простой цели рендеринга предопределенных геометрических умножений времени, Shapes являются векторным эквивалентом пиксельного изображения (в случае, если вам интересно, вам нужно будет использовать translate/transform для переопределения Shape при рендеринге , нет вызовов, которые принимают координаты для фигур).

Для создания более сложных форм из основных форм вы можете использовать API java.awt.geom.Path2D, который, например, имеет конкретную реализацию под названием GeneralPath, которая позволяет комбинировать фигуры.

EDIT: Таким образом, Graphics2D не подходит для вашей задачи, Shape/GeneralPath.

Смежные вопросы