在Java AWT图形中绘制单个像素的最快方法

在Java AWT图形中绘制单个像素的最快方法,java,performance,graphics,awt,Java,Performance,Graphics,Awt,我正在为不同的需要开发一个轻量级的图形API,我希望在显示之前渲染图像。我已经覆盖了AWT的组件,以获得最高的性能。但是,如果我在paint方法中渲染图像绘制线、矩形和其他内容,那么如果频繁调用该方法(例如,调整窗口大小或播放动画),则用户可以看到绘制过程,这是一个性能非常高的解决方案 我决定单独缓存和渲染图像,并在paint方法中将像素复制到图形对象。但现在我不知道如何在图形对象上绘制单个像素。我假设底层Sun实现有这样的方法,但我不应该处理该类。我知道Graphics类声明了几种方法draw

我正在为不同的需要开发一个轻量级的图形API,我希望在显示之前渲染图像。我已经覆盖了AWT的组件,以获得最高的性能。但是,如果我在paint方法中渲染图像绘制线、矩形和其他内容,那么如果频繁调用该方法(例如,调整窗口大小或播放动画),则用户可以看到绘制过程,这是一个性能非常高的解决方案

我决定单独缓存和渲染图像,并在paint方法中将像素复制到图形对象。但现在我不知道如何在图形对象上绘制单个像素。我假设底层Sun实现有这样的方法,但我不应该处理该类。我知道Graphics类声明了几种方法drawLine、drawRect、fillRect等,它们看起来很轻,只能用于绘制一个像素,但我不知道哪种方法最快

由于一些内存问题,我不想使用BuffereImage,因此在这种情况下drawImage不是解决方案。这也不是中要求的情况,因为我不使用图像,也不在paint方法中创建新实例渲染图像数据类仅在调整组件大小时更改

tl;dr:java.awt.Graphics中最快的方法,通过坐标将某个像素的颜色设置为指定的颜色java.awt.color或RGB,最后一个首选


提前感谢您。

如果您觉得需要呼叫重新喷漆并立即停止喷漆。玩一下我今天早上做的这个。 包装宠物

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.IOException;
import javax.swing.*;


public class pet extends JPanel implements MouseListener{
public static JFrame frame = new JFrame("frame");
public pet() throws IOException{
 setPreferredSize(new Dimension(870, 675));         //configuring panel
 addMouseListener(this);
}
public static void main(String[] args) throws IOException{
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JComponent newContentPane = new pet();
    newContentPane.setOpaque(true);
    frame.setContentPane(newContentPane);
    frame.pack();
    frame.setVisible(true);
    frame.addMouseListener(new pet());
}
public void paintRectangleAtPoint(Graphics g, int x, int y){
g.setColor(Color.BLACK);
g.drawRect(x, y, 100,100);
}
public void paintStuff(Graphics g, int x, int y){
g.setColor(Color.BLACK);
g.drawRect(x, y, 100,100);
}
@Override
public void mouseClicked(MouseEvent e) {
paintStuff(frame.getGraphics(),e.getX(), e.getY());
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
 public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}

玩转这个,它非常简单,告诉我如果你想在你称之为绘画方法的任何地方发表一些评论,你可以传递x,y坐标,然后做g.drawRectxCoord,yCoord,1,1;