我正在尝试编写一个能够在画布上绘制多边形的Java Applet。到现在为止还挺好。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DrawingLines2 extends Applet implements ItemListener {
DrawCanvas canvas;
public void init() {
// Create components and lay out the applet
canvas = new DrawCanvas();
...
}
}
class DrawCanvas extends Canvas implements ActionListener, MouseListener{
...
}
然而,我希望程序能够获取当前可见的画布并循环遍历每个像素,并收集其颜色。
然而,似乎Canvas类中没有一个方法可以让我在指定点(x,y)获得画布中像素的颜色。 还有另一种方法可以达到这个目的吗?
答案 0 :(得分:0)
一种方法可能是使用Robot#getPixelColor
,但您需要将像素位置从组件空间转换为屏幕空间。这可能相当慢,并且由于applet在其下运行的严格安全限制,您也可能在创建Robot
实例时遇到问题。
另一种选择可能是创建与BufferedImage
大小相同的DrawCanvas
并使用其Graphics
上下文,在print
上调用DrawCanvas
像...一样的东西。
class DrawCanvas extends Canvas implements ActionListener, MouseListener{
//...
public Color getRGBAt(int x, int y) {
BufferedImage img = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
paint(g2d);
g2d.dispose();
return new Color(img.getRGB(x, y), true);
}
现在,就个人而言,我强烈建议您不要使用基于AWT的组件,并鼓励您使用Swing API,因为AWT相当陈旧,并且没有多少开发人员积极使用它,因此很难找到对问题的支持你可能有。我还鼓励你不要使用小程序,如果你可以避免它,而你正在学习;他们有一堆他们自己的问题,这使得整个过程变得复杂,没有多少收获。
答案 1 :(得分:0)
创建一个BufferedImage,在BufferedImage上绘制图形,然后使用drawImage()将BufferedImage的内容复制到Canvas。
使用BufferedImage中的getData()或getRGB()来获取像素颜色。