gpt4 book ai didi

java - BufferedImage.setRGB() 不更新

转载 作者:行者123 更新时间:2023-11-29 03:12:26 25 4
gpt4 key购买 nike

我正在尝试做一些简单的事情。我总是无法让 Java GUI 正常工作。我希望像素在我写入时更新;但是 for 循环的绘图似乎没有被绘制。我需要调用哪种更新方法才能显示我的 BufferedImage

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.image.BufferedImage;

public class DirectDrawDemo {

public static void main(String[] args) {
int width = 640;
int height = 480;
Frame frame = new Frame("Direct draw demo");
BufferedImage canvas = new BufferedImage(
width, height,
BufferedImage.TYPE_INT_RGB);
Panel panel = new Panel();
panel.setPreferredSize(new Dimension(width, height));
frame.add(panel);
frame.setVisible(true);
frame.setResizable(false);
panel.setBackground(Color.PINK);
for (int x = 1; x < width; x++)
for (int y = 0; y < height; y++)
canvas.setRGB(x, y, rgbtoint(0, 255, 0));
System.out.println(canvas.getRGB(0, 0) != canvas.getRGB(1, 0));
panel.paint(canvas.getGraphics());
panel.repaint();
frame.pack();
}
static int rgbtoint(int red, int green, int blue) {
int rgb = red;
rgb = (rgb << 8) + green;
rgb = (rgb << 8) + blue;
return rgb;
}
static int rgbtored(int rgb) {
return (rgb >> 16) & 0xFF;
}
static int rgbtogreen(int rgb) {
return (rgb >> 8) & 0xFF;
}
static int rgbtoblue(int rgb) {
return rgb & 0xFF;
}
}

screenshot

最佳答案

基本上,您所做的是在图像上绘制面板的组件,而不是相反。

您似乎认为 paint(Graphics g) 方法将 g 的内容放在窗口上。它没有。它所做的是在 g 上画东西。而且不应该直接调用它。它通常的工作方式是创建自己的继承自 Panel(或任何组件)的类,并覆盖它的 paint() 方法,通过调用您传递的 Graphics 对象的绘图方法,添加在其中绘制东西的操作。在这种情况下,您可能会调用 g.drawImage(...)

当在组件上调用 repaint() 时,它的 paint() 方法将以代表窗口“ Canvas ”的图形作为其参数被调用,并且因此,您添加到 paint() 的任何内容都将在其上绘制。

要了解更多信息,请从the Oracle turorial on drawing primitives开始,当您了解了 paint() 方法的工作原理后,请继续阅读 drawing images .

关于java - BufferedImage.setRGB() 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28593707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com