Olá, @lyah.
Minha resposta anterior fez algum sentido? Era mais ou menos o que vc tava procurando? Achei interessante o lance com desenhos de circulos e gostaria de saber se entendi bem o seu problema.
Enfim. BufferedImage, né? Dá sim pra usar e eu precisei fazer apenas pequenas modificações no código que mostrei anteriormente.
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
class App extends JFrame {
private static int WINDOW_WIDTH = 400;
private static int WINDOW_HEIGHT = 400;
@Override public void paint(Graphics g) {
super.paint(g);
BufferedImage imagem = new BufferedImage( WINDOW_WIDTH, WINDOW_HEIGHT, BufferedImage.TYPE_INT_RGB );
drawCircleInImage(imagem, 200, 200, 100, 120, Color.WHITE);
g.drawImage(imagem, 0, 0, null);
}
public void drawCircleInImage(BufferedImage imagem, int posicaoCentroX, int posicaoCentroY,
int raio, int quantidadeDePontos, Color cor) {
double distanciaEntrePontos = 2 * Math.PI / quantidadeDePontos;
for (int i = 0; i < quantidadeDePontos; i++) {
double cos = Math.cos(i * distanciaEntrePontos);
double sin = Math.sin(i * distanciaEntrePontos);
int x = (int) ( cos * raio + posicaoCentroX );
int y = (int) ( sin * raio + posicaoCentroY );
imagem.setRGB(x, y, cor.getRGB());
}
}
public static void main(String... args) {
JFrame frame = new App();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Se comparar o método drawCircle (da outra resposta) com o drawCircleInImage verá que as diferenças foram minímas.
Por isso eu comentei sobre modificar valores e testar pra entender bem como funciona, pois quando entendemos como o código funciona, fica fácil fazer modificações para que se adeque as nossas necessidades.
O princípio é mesmo. setRGB desenha 1 pixel que é, essencialmente, o que eu quis simular com o fillRect do outro código.
Segue um print do resultado do código acima.
