Java - 获取缓冲图像上圆圈内的所有像素

时间:2018-06-06 15:14:31

标签: java loops bufferedimage geometry

我无法在网上找到这个问题的解决方案,对不起,如果之前已经问过这个问题,我认为我的问题标题不够具体,所以,我会详细解释。

所以,我所做的是创建一个具有特定大小和类型的BufferedImage,例如: BufferedImage img1 = new BufferedImage(500, 500, BufferedImage.TYPE_INT_ARGB); 而我想要做的是使用“for”循环并循环通过假想圆内的每个单个图像的像素,让我们说圆圈从(X,Y)(0,0)开始,然后结束( X,Y)(500,500)。

现在,我想要做的是循环通过该假想圆内的每一个像素,然后再对该像素做一些事情(例如改变它的颜色)。

任何人都可以帮我做吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我想出了一个可以解决这个问题的想法,不仅适用于圆形,也适用于任何其他形状。

所以,我的想法是创建另一个缓冲图像,使其与我想要编辑的图像相同(处理),确保它的所有像素都是空白的(透明),并绘制您想要在新图像(例如圆圈)上的形状,我们保持形状颜色的轨迹,并且需要填充形状。

之后,我们使用for循环和x,y整数变量循环遍历我们要编辑的图像上的每个像素,每次循环重复时,我们检查形状的图像以查看是否在那里绘制形状,为此,我们检查像素颜色是否与形状图像上的形状颜色相同。如果是,循环已经检测到形状内部像素的坐标,然后我们可以用它做一些事情。 (for循环使用X和Y坐标整数)

以下是一个示例代码:

public static BufferedImage yourMethodName(BufferedImage inputImage, Point circlePosition, Dimension circleSize)
{
    BufferedImage outputImage = inputImage;
    BufferedImage circleImage = new BufferedImage(inputImage.getWidth(), inputImage.getHeight(), BufferedImage.TYPE_INT_ARGB);
    Graphics drawOnCircleImg = circleImage.getGraphics();
    Color circleColor = new Color(0, 255, 0);

    drawOnCircleImg.setColor(circleColor);
    drawOnCircleImg.fillOval(circlePosition.x, circlePosition.y, circleSize.width, circleSize.height);

    for(int y = 0; y < outputImage.getHeight(); y++)
    {
        for(int x = 0; x < outputImage.getWidth(); x++)
        {
            if(circleImage.getRGB(x, y) == circleColor.getRGB())
            {
                //PIXEL IS INSIDE OF THE SHAPE, IT IS DETECTED, DO SOMETHING NOW
                //VARIABLES FOR THE PIXEL POSITION ARE: X, Y
            }
        }
    }

    return outputImage;
}