На основе класса Graphics, который предоставляет различные основные геометрические фигуры, язык Java расширяет класс Graphics, предоставляя класс Graphics2D, который обладает более мощными возможностями обработки двумерной графики и обеспечивает более точное преобразование координат, управление цветом и макет текста. . контроль.
Свойства чертежа
Graphics2D определяет несколько методов для добавления или изменения свойств состояния графики. Вы можете указать ширину кисти и метод подключения кисти, задав и изменив свойства состояния; задав графику преобразования, поворота, масштабирования или обрезки, а также задав цвет и узор заполненной графики и т. д. Свойства состояния графики хранятся с использованием определенных объектов.
1. атрибут штриха
Свойство Stroke управляет шириной линии, стилем пера, способом соединения сегментов или узором штриха. Чтобы установить это свойство, вам необходимо сначала создать объект BasicStroke, а затем вызвать метод setStroke(), чтобы установить его. Методы создания объектов BasicStroke:
BasicStroke(float w): определяет ширину линии w.
BasicStroke(float w,int cap, int join):
cap — это конечная точка: CAP_BUTT (немодифицированный), CAP_ROUND (полукруглый конец), CAP_SQUARE (квадратный конец, значение по умолчанию).
Соединение определяет метод соединения на пересечении двух сегментов линии: JOIN_BEVEL (немодифицированный), JOIN_MTTER (заостренный конец, значение по умолчанию), JOIN_ROUND (закругленный конец).
2. атрибут краски
Свойство краски управляет эффектом заливки. Сначала вызовите следующий метод, чтобы определить эффект заливки, и используйте метод setPaint(), чтобы установить его.
GradientPaint(float x1,float y1,Color c1,float x2,flaot y2,Color c2): градиент цвета от (x1,y1) до (x2,y2) от c1 до c2. Среди них: параметры c1 и c2 определяют цвет градиента от цвета c1 к цвету c2. Параметры x1, y1, x2, y2 определяют силу градиента, то есть, начиная от точки (x1, y1) к точке (x2, y2), цвет меняется от c1 до c2.
GradientPaint(float x1, float y1, Color c1, float x2, float y2, Color c2, логическое циклическое значение): если вы хотите, чтобы градиент заканчивался и был цветом начальной точки, для параметра cyclic должно быть установлено значение true.
3. преобразовать атрибут
Атрибут преобразования используется для реализации общих операций преобразования, таких как преобразование графики, масштабирование и снятие фасок. Сначала создайте объект AffineTransform, а затем вызовите метод setTransform(), чтобы установить атрибут преобразования. Наконец, графика рисуется с использованием объекта Graphics2D с указанными свойствами. Методы создания объектов AffineTransform:
Вы также можете сначала создать объект AffineTransform без атрибута преобразования, а затем использовать следующие методы для указания атрибутов преобразования графики, поворота и масштабирования.
Например, создайте объект AffineTransform:
AffineTransform транс = новый AffineTransform();
Укажите свойства преобразования вращения вокруг точки для объекта AffineTransform:
Trans.rotate(50.0*3.1415927/180.0,90,80);
Затем установите «кисть» с помощью вышеуказанной функции преобразования вращения для объекта Graphics2D g2d:
Graphics2D g2d = (Graphics2D)g;g2d.setTranstorm(trans);
Наконец, вызывается метод draw() объекта Graphics2D с функцией преобразования с графическим объектом в качестве параметра. Например, предполагая, что существует объектная кривая квадратичной кривой, следующий код реализует рисование этой квадратичной кривой с использованием объекта g2d с указанной выше функцией вращения:
g2d.draw(кривая);
4. атрибут клипа
Атрибут clip используется для достижения эффектов обрезки. Чтобы установить атрибут обрезки, вы можете вызвать метод setClip(), чтобы определить форму области обрезки. Несколько операций setClip() выполняются последовательно, чтобы получить область отсечения в месте их пересечения.
5. составной атрибут
Атрибут composit задает эффект перекрытия области графики. Сначала используйте метод AlphaComposite.getInstance(int rule, float Alpha), чтобы получить объект AlphaComposite, а затем установите эффект смешивания с помощью метода setComposite(). Значения альфа варьируются от 0,0f (полностью прозрачный) до 0,1f (полностью непрозрачный).
Методы рисования класса Graphics2D
Класс Graphics2D по-прежнему сохраняет методы рисования класса Graphics, но добавляет множество новых методов. Новый метод рисует геометрические фигуры (отрезки линий, круги и т. д.) как объект. Ряд классов, объявленных в пакете java.awt.geom, используются для создания различных объектов основной графики. Основные из них:
Класс сегмента линии Line2D, класс прямоугольника со скругленными углами RoundRectangle2D, класс эллипса Ellipse2D, класс дуги Arc2D, класс квадратичной кривой QuadCurve2D, класс кубической кривой CubicCurve2D.
Нарисовать графику, используя новые методы класса Graphics2D. Сначала в методе перерисовки PaintComponent() или Paint() принудительно добавьте объект параметра g в объект Graphics2D, затем используйте статический метод Double(), предоставленный вышеуказанным графическим классом, чтобы создать объект графики, наконец, используйте; графический объект в качестве параметра. Вызовите метод draw() объекта Graphics2D, чтобы нарисовать эту графику. Например, следующий код использует новый метод Graphics2D для рисования сегментов линий и прямоугольников со скругленными углами:
Graphics2D g2d = (Graphics2D)g;//Преобразуем тип объекта g из Graphics в Graphics2D Line2D line = new Line2D.Double(30.0,30.0,340.0,30.0); g2d.draw(line); RoundRectangle2D rRect = new; RoundRectangle2D.Double(13.0,30.0,100.0,70.0,40.0,20.0); g2d.draw(rRect);
Вы также можете сначала использовать объект Shape, предоставленный пакетом java.awt.geom, создать объект Shape с координатами Float одинарной точности или координатами Double двойной точности, а затем нарисовать его с помощью метода draw(). Например, следующий код создает объект дуги, а затем рисует дугу:
Shape arc = new Arc2D.Float(30,30,150,150,40,100,Arc2D.OPEN); g2d.draw(arc)//Нарисовать ранее созданную дугу графического объекта
Класс геометрии Graphics2D
сегмент линии
Line2D line = new Line2D.Double(2,3,200,300);//Объявляем и создаем объект сегмента линии//Начальная точка — (2, 3), а конечная точка — (200, 300)
прямоугольник
Rectangle2D rect = new Rectangle2D.Double(20,30,80,40);//Объявляем и создаем объект-прямоугольник. Левый верхний угол прямоугольника — (20, 30), ширина — 300, высота — 40.
прямоугольник с закругленными углами
RoundRectangle2D rectRound = new RoundRectangle2D.Double(20,30,130,100,18,15 //Левый верхний угол (20, 30), ширина 130, высота 100, длинная ось закругленного угла 18, а короткая ось равна 15.
овал
Ellipse2D ellipse = new Ellipse2D.Double(20,30,100,50 //Верхний левый угол (20, 30), ширина 100, высота 50);
Дуга
Arc2D arc1 = new Arc2D.Double(8,30,85,60,5,90,Arc2D.OPEN); //Левый верхний угол окружающего прямоугольника (10, 30), ширина 85, высота 60, начальный угол равен 5 градусов, конечный угол 90 градусов Arc2D arc2 = новый Arc2D.Double(20,65,90,70,0,180,Arc2D.CHORD Arc2D arc3 = новый Arc2D.Double(40,110,50,90,0,270,Arc2D.PIE);
Параметры Arc2D.OPEN, Arc2D.CHORD и Arc2D.PIE соответственно указывают, является ли дуга разомкнутой, дугой дуги или круговой дугой.
Квадратичная кривая Квадратичная кривая представлена полиномом второго порядка:
y(x)=ax2+bx+c
Квадратичная кривая должна определяться тремя точками: начальной точкой, контрольной точкой и конечной точкой.
Кривая QuadCurve2D1 = новый QuadCurver2D.Double(20,10,90,65,55,115) Кривая QuadCurve2D2 = новый QuadCurver2D.Double(20,10,15,63,55,115 Кривая QuadCurve2D3 = новый); QuadCurver2D.Double(20,10,54,64,55,115);
Шесть параметров метода Double() — это начальная точка, контрольная точка и конечная точка квадратичной кривой. Начальные и конечные точки трех вышеупомянутых квадратичных кривых одинаковы.
Кубическая кривая Кубическая кривая представлена полиномом третьего порядка:
y(x)=ax3+bx2+cx+d
Для определения кубической кривой требуется четыре точки: начальная точка, две контрольные точки и конечная точка.
Кривая CubicCurve2D.Double(12,30,50,75,15,15,115,93), кривая CubicCurve2D2 = новая кривая CubicCurve2D.Double(12,30,15,70,20,25,35,94); = новый CubicCurve2D.Double(12,30,50,75,20,95,95,95);
Восемь параметров метода Double() — это начальная точка, две контрольные точки и конечная точка кубической кривой.
Процесс рисования кривых общего уравнения контролируется циклом. Сгенерируйте значение независимой переменной через цикл, вычислите значение функции в соответствии с уравнением, а затем выполните необходимое преобразование координат: преобразование перевода для позиционирования начала координат, преобразование масштабирования для уменьшения или увеличения изображения, получите изображение точки кривой, и нарисуйте эту точку. В качестве примера возьмем следующее уравнение кривой:
Y=sin(x)+cos(x),x
Часть кода рисования можно записать следующим образом:
двойной x0,y0,x1,y1,x2,y2,масштаб;x0=100;y0=80;масштаб =20,0;for(x1=-3.1415926d;x1<=2*3.1415926d;x1+=0.01d){ y1 =Math.sin(x1)+Math.cos(x1); x2=x0+x1*scale;y2=y0+y1*scale;//(x2,y2) — точка изображения g.fillOval((int)x2,(int)y2,1,1);//Рисуем точки круга как точки изображения}