Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/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
Image processing 如何复制由三次曲线包围的图像区域_Image Processing_Java 2d - Fatal编程技术网

Image processing 如何复制由三次曲线包围的图像区域

Image processing 如何复制由三次曲线包围的图像区域,image-processing,java-2d,Image Processing,Java 2d,我有一个Java程序,它的工作原理与Inkscape中的Bezier工具非常相似。我的程序的目的是允许用户使用曲线绘制对象(如人的头部)周围的路径,然后提取(复制)封闭曲线内的像素。在所附图片中,您可以看到有3条蓝色曲线构成一个封闭区域。我想知道如何复制这3条曲线所包围的区域 我用来绘制曲线的代码(为了简单起见,我省略了红色切线和红色控制点): 以下是我解决问题的方法: GeneralPath shape = new GeneralPath(); shape.mo

我有一个Java程序,它的工作原理与Inkscape中的Bezier工具非常相似。我的程序的目的是允许用户使用曲线绘制对象(如人的头部)周围的路径,然后提取(复制)封闭曲线内的像素。在所附图片中,您可以看到有3条蓝色曲线构成一个封闭区域。我想知道如何复制这3条曲线所包围的区域

我用来绘制曲线的代码(为了简单起见,我省略了红色切线和红色控制点):


以下是我解决问题的方法:

        GeneralPath shape = new GeneralPath();
        shape.moveTo(cubicCurve1.x1, cubicCurve1.y1);
        shape.curveTo(cubicCurve1.ctrlx1, cubicCurve1.ctrly1, cubicCurve1.ctrlx2, cubicCurve1.ctrly2, cubicCurve1.x2, cubicCurve1.y2);
        shape.curveTo(cubicCurve2.ctrlx1, cubicCurve2.ctrly1, cubicCurve2.ctrlx2, cubicCurve2.ctrly2, cubicCurve2.x2, cubicCurve2.y2);
        shape.curveTo(cubicCurve3.ctrlx1, cubicCurve3.ctrly1, cubicCurve3.ctrlx2, cubicCurve3.ctrly2, cubicCurve1.x1, cubicCurve1.y1);
        g2D.draw(shape);
        g2D.setClip(shape);

        // Draw an image

        g2D.drawImage(image, 0, 0, this);

如果您使用曲线填充多边形,多边形将定义您需要复制的区域。对于这个虚拟问题,我感到抱歉,因为我是Java新手:请用代码向我展示您的建议好吗?我看了一下,但找不到任何多边形类函数可以返回面积。“如果你用曲线填充多边形,多边形将定义你需要复制的面积”:很多Balooney我很高兴你能自己解决这个问题。我对Java的了解还不够,无法提供任何帮助。谢谢你,马克·兰森。你的建议确实让我找到了解决办法。再次感谢
        GeneralPath shape = new GeneralPath();
        shape.moveTo(cubicCurve1.x1, cubicCurve1.y1);
        shape.curveTo(cubicCurve1.ctrlx1, cubicCurve1.ctrly1, cubicCurve1.ctrlx2, cubicCurve1.ctrly2, cubicCurve1.x2, cubicCurve1.y2);
        shape.curveTo(cubicCurve2.ctrlx1, cubicCurve2.ctrly1, cubicCurve2.ctrlx2, cubicCurve2.ctrly2, cubicCurve2.x2, cubicCurve2.y2);
        shape.curveTo(cubicCurve3.ctrlx1, cubicCurve3.ctrly1, cubicCurve3.ctrlx2, cubicCurve3.ctrly2, cubicCurve1.x1, cubicCurve1.y1);
        g2D.draw(shape);
        g2D.setClip(shape);

        // Draw an image

        g2D.drawImage(image, 0, 0, this);