Com base na classe Graphics que fornece várias figuras geométricas básicas, a linguagem Java estende a classe Graphics para fornecer uma classe Graphics2D, que possui recursos de processamento de gráficos bidimensionais mais poderosos e fornece conversão de coordenadas, gerenciamento de cores e layout de texto mais precisos. controle.
Propriedades de desenho
Graphics2D define vários métodos para adicionar ou alterar as propriedades de estado dos gráficos. Você pode especificar a largura do pincel e o método de conexão do pincel definindo e modificando as propriedades de estado, definindo a translação, rotação, dimensionamento ou corte dos gráficos de transformação e definindo a cor e o padrão dos gráficos preenchidos, etc. As propriedades do estado gráfico são armazenadas usando objetos específicos.
1. atributo de traço
A propriedade do traço controla a largura da linha, o estilo da caneta, a forma como os segmentos são conectados ou o padrão do traço. Para definir esta propriedade, você precisa primeiro criar um objeto BasicStroke e depois chamar o método setStroke() para defini-lo. Os métodos para criar objetos BasicStroke são:
BasicStroke(float w): Especifica a largura da linha w.
BasicStroke(float w,int cap, int join):
cap é um ponto final: CAP_BUTT (não modificado), CAP_ROUND (extremidade semicircular), CAP_SQUARE (extremidade quadrada, valor padrão).
Join define o método de conexão na interseção de dois segmentos de linha: JOIN_BEVEL (não modificado), JOIN_MTTER (extremidade pontiaguda, valor padrão), JOIN_ROUND (extremidade arredondada).
2. atributo de pintura
A propriedade paint controla o efeito de preenchimento. Primeiro chame o método a seguir para determinar o efeito de preenchimento e use o método setPaint() para defini-lo.
GradientPaint(float x1,float y1,Color c1,float x2,flaot y2,Color c2): De (x1,y1) a (x2,y2) o gradiente de cor de c1 a c2. Entre eles: os parâmetros c1 e c2 determinam a cor do gradiente da cor c1 à cor c2. Os parâmetros x1, y1, x2, y2 determinam a intensidade do gradiente, ou seja, partindo do ponto (x1, y1) ao ponto (x2, y2), a cor muda de c1 para c2.
GradientPaint(float x1, float y1, Color c1, float x2, float y2, Color c2, Boolean cíclico): Se você deseja que o gradiente termine e seja a cor do ponto inicial, cíclico deve ser definido como verdadeiro.
3. atributo de transformação
O atributo transform é usado para implementar operações de transformação comuns, como tradução de gráficos, dimensionamento e chanfro. Primeiro crie um objeto AffineTransform e, em seguida, chame o método setTransform() para definir o atributo transform. Finalmente, os gráficos são desenhados usando um objeto Graphics2D com propriedades especificadas. Os métodos para criar objetos AffineTransform são:
Você também pode criar um objeto AffineTransform sem um atributo de transformação primeiro e, em seguida, usar os métodos a seguir para especificar os atributos de conversão gráfica, rotação e transformação de dimensionamento.
Por exemplo, crie um objeto AffineTransform:
AffineTransform trans = new AffineTransform();
Especifique as propriedades de transformação de rotação de ponto próximo para o objeto AffineTransform:
Trans.rotate(50,0*3,1415927/180,0,90,80);
Em seguida, defina o "pincel" com a função de transformação de rotação acima para o objeto Graphics2D g2d:
Gráficos2D g2d = (Gráficos2D)g;g2d.setTranstorm(trans);
Finalmente, o método draw() do objeto Graphics2D com função de transformação é chamado com o objeto gráfico como parâmetro. Por exemplo, supondo que haja uma curva de objeto de curva quadrática, o código a seguir implementa o desenho dessa curva quadrática usando o objeto g2d com a função de rotação acima:
g2d.draw(curva);
4. atributo do clipe
O atributo clip é usado para obter efeitos de recorte. Para definir o atributo de recorte, você pode chamar o método setClip() para determinar a forma da área de recorte. Múltiplas operações setClip() são executadas consecutivamente para obter a área de recorte onde elas se cruzam.
5. atributo de composição
O atributo composit define o efeito da área sobreposta dos gráficos. Primeiro use o método AlphaComposite.getInstance(int regra, float alpha) para obter o objeto AlphaComposite e, em seguida, defina o efeito de mixagem por meio do método setComposite(). Os valores alfa variam de 0,0f (totalmente transparente) a 0,1f (totalmente opaco).
Métodos de desenho da classe Graphics2D
A classe Graphics2D ainda mantém os métodos de desenho da classe Graphics, enquanto adiciona muitos métodos novos. O novo método desenha formas geométricas (segmentos de linha, círculos, etc.) como um objeto. Uma série de classes declaradas no pacote java.awt.geom são usadas para criar vários objetos gráficos corporais. Os principais são:
Classe de segmento de linha Line2D, classe de retângulo arredondado RoundRectangle2D, classe de elipse Ellipse2D, classe de arco Arc2D, classe de curva quadrática QuadCurve2D, classe de curva cúbica CubicCurve2D.
Desenhar um gráfico utilizando os novos métodos da classe Graphics2D. Primeiro, no método de redesenho paintComponent() ou paint(), force o objeto de parâmetro g em um objeto Graphics2D e, em seguida, use o método estático Double() fornecido pela classe gráfica acima para criar o objeto dos gráficos; o objeto gráfico como parâmetro Chame o método draw() do objeto Graphics2D para desenhar este gráfico. Por exemplo, o código a seguir usa o novo método Graphics2D para desenhar segmentos de linha e retângulos arredondados:
Graphics2D g2d = (Graphics2D)g;//Converte o objeto tipo g de Graphics para Graphics2D Line2D line = new Line2D.Double(30.0,30.0,340.0,30.0); RoundRectangle2D.Double(13.0,30.0,100.0,70.0,40.0,20.0);
Você também pode primeiro usar o objeto Shape fornecido pelo pacote java.awt.geom, criar um objeto Shape com coordenadas Float de precisão simples ou coordenadas Double de precisão dupla e, em seguida, desenhá-lo usando o método draw(). Por exemplo, o código a seguir cria um objeto de arco e depois desenha o arco:
Shape arc = new Arc2D.Float(30,30,150,150,40,100,Arc2D.OPEN);
Classe de geometria de Graphics2D
segmento de linha
Line2D line = new Line2D.Double(2,3,200,300);//Declara e cria um objeto de segmento de linha //O ponto inicial é (2, 3) e o ponto final é (200, 300)
retângulo
Rectangle2D rect = new Rectangle2D.Double(20,30,80,40);//Declara e cria um objeto retângulo O canto superior esquerdo do retângulo é (20, 30), a largura é 300 e a altura é 40.
retângulo arredondado
RoundRectangle2D rectRound = new RoundRectangle2D.Double(20,30,130,100,18,15); //O canto superior esquerdo é (20, 30), a largura é 130, a altura é 100, o longo eixo do canto arredondado é 18, e o eixo curto é 15.
oval
Ellipse2D ellipse = new Ellipse2D.Double(20,30,100,50); //Canto superior esquerdo (20, 30), largura é 100, altura é 50);
Arco
Arc2D arc1 = new Arc2D.Double(8,30,85,60,5,90,Arc2D.OPEN); //O canto superior esquerdo do retângulo envolvente (10, 30), largura 85, altura 60, ângulo inicial é; 5 graus, o ângulo final é 90 graus Arc2D arc2 = novo Arc2D.Double(20,65,90,70,0,180,Arc2D.CHORD); Arc2D arc3 = novo Arc2D.Double(40,110,50,90,0,270,Arc2D.PIE);
Os parâmetros Arc2D.OPEN, Arc2D.CHORD e Arc2D.PIE indicam respectivamente se o arco é um arco aberto, um arco em arco ou um arco de pizza.
Curva quadrática Uma curva quadrática é representada por um polinômio de segunda ordem:
y(x)=ax2+bx+c
Uma curva quadrática precisa ser determinada por três pontos: o ponto inicial, o ponto de controle e o ponto final.
QuadCurve2D curva1 = nova QuadCurver2D.Double(20,10,90,65,55,115); QuadCurve2D curva2 = nova QuadCurver2D.Double(20,10,15,63,55,115); QuadCurver2D.Double(20,10,54,64,55,115);
Os seis parâmetros no método Double() são o ponto inicial, o ponto de controle e o ponto final da curva quadrática. Os pontos iniciais e finais das três curvas quadráticas acima são iguais.
Curva Cúbica Uma curva cúbica é representada por um polinômio de terceira ordem:
y(x)=ax3+bx2+cx+d
Uma curva cúbica requer quatro pontos para ser determinada: o ponto inicial, dois pontos de controle e o ponto final.
CubicCurve2D curva1 = nova CubicCurve2D.Double(12,30,50,75,15,15,115,93) CubicCurve2D curva2 = nova CubicCurve2D.Double(12,30,15,70,20,25,35,94); = novo CubicCurve2D.Double(12,30,50,75,20,95,95,95);
Os oito parâmetros no método Double() são o ponto inicial, dois pontos de controle e o ponto final da curva cúbica.
O processo de desenho de curvas de equações gerais é controlado por um loop. Gere o valor da variável independente por meio de um loop, calcule o valor da função de acordo com a equação e, em seguida, execute a transformação de coordenadas necessária: transformação de tradução para posicionamento de origem, transformação de escala para redução ou ampliação de imagem, obtenção do ponto de imagem da curva, e desenhe este ponto. Tomemos como exemplo o desenho da seguinte equação de curva:
Y = pecado (x) + cos (x), x
Parte do código do desenho pode ser escrita da seguinte forma:
duplo x0,y0,x1,y1,x2,y2,escala;x0=100;y0=80;escala =20,0;for(x1=-3,1415926d;x1<=2*3,1415926d;x1+=0,01d){ y1 =Matemática.sin(x1)+Matemática.cos(x1); x2=x0+x1*scale;y2=y0+y1*scale;//(x2,y2) é o ponto da imagem g.fillOval((int)x2,(int)y2,1,1);//Desenhe um pontos do círculo como pontos de imagem}