Java 小程序 - 绘制多边形 - 读取 RGB

Java Applet - Drawing Polygons - Reading RGB

我正在尝试编写一个 Java Applet,它能够在 canvas 上绘制多边形。到目前为止,一切都很好。

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 并遍历每个像素,收集其颜色。

但是,Canvas class 中似乎没有方法可以让我获取 canvas 中指定点(x ,y). 还有其他方法可以实现吗?

一种方法可能是使用 Robot#getPixelColor,但您需要将像素位置从组件 space 转换到屏幕 space。这可能会很慢,并且由于小程序运行的严格安全限制,您还可能在创建 Robot 实例时遇到问题。

另一种选择可能是创建与 DrawCanvas 大小相同的 BufferedImage 并使用其 Graphics 上下文,在 DrawCanvas 上调用 print

类似...

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 相当过时并且没有多少开发人员在积极使用它,这使得它很难为您可能遇到的问题找到支持。我还鼓励您在学习时尽可能避免使用小程序;他们有一堆自己的问题,这只会使整个过程复杂化,没有太多收获。

创建一个 BufferedImage,在该 BufferedImage 上绘图,然后使用 drawImage() 将 BufferedImage 的内容复制到 Canvas。

使用 BufferedImage 中的 getData() 或 getRGB() 获取像素颜色。