java BuffereImage不是从0,0开始绘制的
我希望我的第一篇帖子对你们来说不是太基本
我正在尝试使用BuffereImage(使用setRGB())在JCanvas上进行逐像素绘制。我想我会用一条从原点到JCanvas宽度/高度的对角线来测试所有这些。问题是,我在x轴上得到了一个奇怪的偏移,我似乎无法修复
以下是问题的链接: http://i811.photobucket.com/albums/zz31/bohngy/problemMandel_zpsae20713a.jpeg
以下是代码:
public class Mandelbrot extends JFrame {
private BufferedImage I;
public Mandelbrot() {
super("Mandelbrot Set");
setSize(600, 600);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
I = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < getHeight(); x++) {
for (int y = 0; y < getWidth(); y++) {
I.setRGB(x, x, Color.GREEN.getRGB());
}
}
}
@Override
public void paint(Graphics g) {
g.drawImage(I, 0, 0, this);
}
public static void main(String[] args) {
new Mandelbrot().setVisible(true);
}
}
# 1 楼答案
一般问题
JFrame
(尤其是不要重写JFrame
的paint
方法)。相反,在paintComponent
方法中绘制扩展JPanel
的类产生意外结果的主要原因是,您正在创建一个具有框架大小的图像,但框架也有一个标题栏和一个边框,这些都是图像的“覆盖”部分。实际可用于绘制的区域的大小小于总框架大小。此外,只要帧在屏幕上还不可见,
getWidth()
和getHeight()
方法可能会返回垃圾考虑到所有这些因素的一种方法可能在这段代码中是这样的:
# 2 楼答案
所有BuffereImage对象的左上角坐标均为(0,0)。因此,用于构建BuffereImage的任何光栅必须具有minX=0和minY=0
这就是你的问题所在
JavaDoc for BufferedImage
编辑:
同时从循环中删除以下内容: