Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的像素计数_Java_Graphics_Colors_Pixel_Bufferedimage - Fatal编程技术网

Java中的像素计数

Java中的像素计数,java,graphics,colors,pixel,bufferedimage,Java,Graphics,Colors,Pixel,Bufferedimage,好吧,经过整个下午的斗争,我似乎找不到正确的答案。 基本上,我有一个非常简单的设置,用白色背景填充我的画布,一个BuffereImage。然后,我从args数组中的点绘制一个多边形。显示方面,这是完美的作品。当我想计算多边形(已填充)使用的像素数时,问题就出现了 为此,我在画布上循环并使用getRGB方法比较每个像素,如果不是白色(背景色),则增加一个计数器。然而,我总是得到画布的尺寸(640*480),这意味着整个画布是白色的 所以我假设绘制到屏幕上的多边形没有添加到画布上,而是漂浮在顶部?这

好吧,经过整个下午的斗争,我似乎找不到正确的答案。 基本上,我有一个非常简单的设置,用白色背景填充我的画布,一个BuffereImage。然后,我从args数组中的点绘制一个多边形。显示方面,这是完美的作品。当我想计算多边形(已填充)使用的像素数时,问题就出现了

为此,我在画布上循环并使用getRGB方法比较每个像素,如果不是白色(背景色),则增加一个计数器。然而,我总是得到画布的尺寸(640*480),这意味着整个画布是白色的

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

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

代码:

公共类应用程序扩展了JPanel{
公共静态int[]xCoord=null;
公共静态int[]yCoord=null;
专用静态int外部参照=250;
专用静态int yRef=250;
私有静态int xOld=0;
私有静态int-yOld=0;
私有静态缓冲图像画布;
私有静态多边形多边形;
公共应用程序(整数宽度、整数高度){
画布=新的BuffereImage(宽度、高度、BuffereImage.TYPE_INT_RGB);
填充画布(颜色:白色);
多边形=新多边形(xCoord,yCoord,xCoord.length);
//循环通过每个像素
整数计数=0;
对于(int i=0;i
“findPoints(args)”方法太长,无法发布,但基本上它所做的一切都是获取参数值并编译点列表

提前感谢,,
Boots

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

if (!c.equals(Color.WHITE))
更快的方法是检查rgb值,而不是首先为其创建颜色对象:

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

创建缓冲区图像,绘制多边形,然后计数。基本上,这是:

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

创建/填充画布时,您使用的是
缓冲图像
对象。多边形捕获在
多边形
对象中。对屏幕的实际渲染是通过操纵
图形
对象完成的,因此从某种意义上说,多边形是“浮动的”;也就是说:它不会显示在画布上,而是在渲染图形对象时绘制在画布上


你需要在画布上真实地渲染多边形,或者从图形对象中获取像素并对其执行计算

这仍然无助于解决OP的意图——多边形不被计算忘记了调整它,原来是这样。正如Attila所说,它不计算多边形,你的代码中有任何信息吗不明白img是如何受到影响的?当然g是用多边形填充的,但这不会影响img?我如何在画布上渲染多边形?您可以尝试本文中概述的方法尝试查看该线程,但无法从中获得任何有用的内容。您可以创建图形2D(您的
画布
),然后调用fill()在带有多边形的Graphics2d对象上——它应该将填充的多边形绘制到BuffereImage(画布)上。图形界面有一个
getBounds()
方法,在这里很有用。因为多边形是填充的,所以可以使用
getBounds()方法
方法查看多边形占据画布的多少,并进行减法运算以获得其大小(以像素为单位)。
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB_PRE);
Graphics2D g = img.createGraphics();
g.fill(polygon);
g.dispose();
countThePixels(img);