gpt4 book ai didi

java - Java 中的像素计数

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:13:45 24 4
gpt4 key购买 nike

好吧,折腾了一个下午,我似乎得不到正确答案。基本上,我有一个非常简单的设置,它用白色背景填充我的 Canvas BufferedImage。然后我从我的 args 数组中的点绘制一个多边形。在显示方面,这非常有效。当我想计算多边形(已填充)用完的像素数时,问题就来了。

为此,我遍历 Canvas 并使用 getRGB 方法比较每个像素,如果它不是白色(背景色),我会递增一个计数器。然而,我总是得到的结果是 Canvas 的尺寸 (640*480),这意味着整个 Canvas 都是白色的。

所以我假设绘制到屏幕上的多边形没有添加到 Canvas 上,而是漂浮在顶部?这是我唯一能想到的答案,但也可能是完全错误的。

我想要的是能够计算非白色像素的数量。有什么建议么?

代码:

public class Application extends JPanel {

public static int[] xCoord = null;
public static int[] yCoord = null;
private static int xRef = 250;
private static int yRef = 250;
private static int xOld = 0;
private static int yOld = 0;
private static BufferedImage canvas;
private static Polygon poly;

public Application(int width, int height) {
canvas = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
fillCanvas(Color.WHITE);
poly = new Polygon(xCoord, yCoord, xCoord.length);

//Loop through each pixel
int count = 0;
for (int i = 0; i < canvas.getWidth(); i++)
for (int j = 0; j < canvas.getHeight(); j++) {
Color c = new Color(canvas.getRGB(i, j));
if (c.equals(Color.WHITE))
count++;
}
System.out.println(count);
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(canvas, null, null);
g2.fillPolygon(poly);

}

public void fillCanvas(Color c) {
int color = c.getRGB();
for (int x = 0; x < canvas.getWidth(); x++) {
for (int y = 0; y < canvas.getHeight(); y++) {
canvas.setRGB(x, y, color);
}
}
repaint();
}


public static void main(String[] args) {
if (args != null)
findPoints(args);

JFrame window = new JFrame("Draw");
Application panel = new Application(640, 480);

window.add(panel);
Dimension SIZE = new Dimension(640, 480);
window.setPreferredSize(SIZE);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
window.pack();
}//end main

“findPoints(args)”方法太长,无法发布,但基本上它所做的一切都是采用参数值并编译点列表。

提前致谢, Boot

最佳答案

只需添加一个感叹号即可反转条件中的 boolean 值:

if (!c.equals(Color.WHITE))

一种更快的方法是检查 rgb 值而不是首先创建它的 Color 对象:

if ((rgb & 0xFFFFFF) != 0xFFFFFF)

创建一个 BufferedImage,绘制多边形,然后计数。基本上,这是:

BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB_PRE);
Graphics2D g = img.createGraphics();
g.fill(polygon);
g.dispose();
countThePixels(img);

关于java - Java 中的像素计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10109035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com