Java Applet - 绘制多边形 - 读取RGB

时间:2015-01-11 23:41:36

标签: java eclipse canvas rgb pixel

我正在尝试编写一个能够在画布上绘制多边形的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)获得画布中像素的颜色。 还有另一种方法可以达到这个目的吗?

2 个答案:

答案 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()来获取像素颜色。