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() 获取像素颜色。
我正在尝试编写一个 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() 获取像素颜色。