【发布时间】:2011-10-26 22:22:26
【问题描述】:
我通过自己的类在 JFrame 中显示了一个 BufferedImage。我选择使用我自己的类来显示 BufferedImage,这样我就可以对其进行缩放。我的paintComponent和更新
public class MyBuffIm{
public void paintComponent(Graphics canvas) {
if (bi == null) {
} else {
//bi, maxWidth, and maxHeight were passed to constructor
canvas.drawImage(bi, 0, 0, maxWidth, maxHeight, null);
}
}
public void update(Graphics canvas) {
super.update(canvas);
if(bi != null){
//Got this from some tutorial in the net.
//Done out of desperation :|
paintComponent(bi.getGraphics());
}
}
}
我覆盖了更新,因为文档说“如果此组件不是轻量级组件,则 AWT 调用更新方法以响应对重绘的调用”。我不确定我的组件是否是轻量级的。
在任何情况下,我的 Runnable 中有以下代码(不能像我预期的那样工作):
BufferedImage p = SomeMyBuffIm.getBuffIm();
Vector<Point> randomPixels = getRandomPixels(500);
int limit = randomPixels.size()
for (i = 0; i < limit; i++) {
Point rp = randomPixels.get(i)
p.setRGB(rp.x, rp.y, Color.red.getRGB());
}
SomeMyBuffIm.repaint();
mainFrame.repaint(); //JFrame call to repaint
我想这样想,因为我正在缩放我的图像,所以我无法辨别新图像和旧图像之间的区别。但是我尝试了 getRandomPixels 的最大值仍然没有效果。顺便说一句,我的测试图像只是一张白纸,因此红色像素应该在其中突出。
我做错了什么?
【问题讨论】:
-
嗯。看来我的问题不是 AWT/Swing 而是 setRGB。循环之后,我在 Vector 中获取第一个随机像素,然后检查它的 getRGB 是否等于 Color.red.getRGB()(使用 System.out.println)。它打印真实。但是,我写出 BufferedImage(使用 ImageIO.write)发现 nothing 实际上发生了变化。那么……我使用 setRGB 有什么问题吗?
-
附录: SSCCE 按照@camickr 的建议出现。但是,如果有人可以在没有我的 SSCCE 的情况下提出任何建议,那就太好了。谢谢!
标签: java awt jframe bufferedimage repaint