0

問題があり、理解できません。私は2つの異なる画像処理技術を使用する必要があります:スケルトン化間引き、そして私はこれをJavaで行う必要があります。問題は、これに関する開始点やチュートリアルが見つからないことです。誰かが私にどこから始めるべきか教えてもらえますか、または誰かが私にそれを達成する方法を説明できますか?私はJavaでアプリケーションを書いていますが、BufferedImage可能であれば(もちろん)、を使用したいと思います。

ありがとう

4

1 に答える 1

5

次のようにBufferedImageに描画できます。

public BufferedImage createSkelethonizationImage() {
   BufferedImage image = new BufferedImage(width, height);
   Graphics2D g2 = image.createGraphics();

   // Perform your drawing here
   g2.drawLine(...);

   g2.dispose();
   return image;
}

画像を描画するには、JComponentを拡張し、paintメソッドをオーバーライドする新しいクラスを作成します。開始するためのコードは次のとおりです。

public class MyImage extends JComponent {
   // Note: the image should be modified on the Event Dispatch Thread
   private BufferedImage image = createSkelethonizationImage();

   @Override
   public void paint(Graphics g) {
      g.drawImage(image, 0, 0, this);
   }
}

編集-完全な解決策:

public class Test {

    public static void main(String[] args) {
       // Width and height of your image
       final int width = 200;
       final int height = 200;

       SwingUtilities.invokeLater(new Runnable() {

          @Override
          public void run() {
             JFrame frame = new JFrame();
             MyImage image = new MyImage(width, height);
             frame.add(image);
             frame.setSize(new Dimension(width, height));
             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
             frame.setVisible(true);            
          }
       });
    }
}

class MyImage extends JComponent {

    // Note: image should be modified on the Event Dispatch Thread only
    private final BufferedImage image;

    public MyImage(int width, int height) {
       image = createSkelethonizationImage(width, height);
       setPreferredSize(new Dimension(width, height));
    }

    public BufferedImage createSkelethonizationImage(int width, int height) {
       BufferedImage iamge = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
       Graphics2D g2 = iamge.createGraphics();

       // Perform your drawing here
       g2.setColor(Color.BLACK);
       g2.drawLine(0, 0, 200, 200);

       g2.dispose();
       return iamge;
    }

    @Override
    public void paint(Graphics g) {
       g.drawImage(image, 0, 0, this);
    }
}
于 2012-04-24T20:51:18.473 に答える