我在另一天参加了线程
Image/Graphic into a Shape,并通过向“区域”中迭代地添加一个矩形,并尝试获取图像的轮廓.那很慢
该示例代替构建GeneralPath并从GP创建区域.快多了.
左上角的图像是“源图像”.右边的两个是处理轮廓的各个阶段.它们都在圆周和锯齿状的三角形的边缘上有锯齿状的边缘.
我想获得一个去除或减少锯齿状的形状.
在ASCII艺术
情况1:
1234
1 **
2 **
3 ***
4 ***
5 ****
6 ****
角落在:
(2,3)内角
>(3,3)
(3,5)内角
>(4,5)
情况2:
1234
1 ****
2 ****
3 **
4 **
5 ****
6 ****
角落在:
>(4,2)
>(2,2)内角
>(2,5)内角
>(4,5)
假设我们的路径具有所示的形状,以及列出的点,我想放下第一组的“内角”点,同时保留内部角的“对”(图像中的一个点),用于第2位.
>有人可以建议一些聪明的内置方法来解除这个工作吗?
>如果不这样做,确定位置和方法是一个好办法自然(对/单)内角? (我猜我可以得到一个PathIterator,并建立一个新的GeneralPath,抛出单一的内在角落 – 如果只有我可以弄清楚如何识别它们!
这里是要玩的代码:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.awt.geom.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
/* Gain the outline of an image for further processing. */
class ImageOutline {
private BufferedImage image;
private TwoToneImageFilter twoToneFilter;
private BufferedImage imageTwoTone;
private JLabel labelTwoTone;
private BufferedImage imageOutline;
private Area areaOutline = null;
private JLabel labelOutline;
private JLabel targetColor;
private JSlider tolerance;
private JProgressBar progress;
private SwingWorker sw;
public ImageOutline(BufferedImage image) {
this.image = image;
imageTwoTone = new BufferedImage(
image.getWidth(),
image.getHeight(),
BufferedImage.TYPE_INT_RGB);
}
public void drawOutline() {
if (areaOutline!=null) {