Javaプログラミング

トップページ      |      目次
←前へ      次へ→

  • 画像処理
    • 画像の入出力
    • Javaで画像処理プログラミングをするにあたって、画像ファイルの取り扱い(入出力について述べる) Javaでは画像ファイルを取り扱う場合ImageIOクラス(javax.imegeio.ImageIO)を利用する。 そのため以下の様にimport文でインポートをする。
      標準でサポートするファイルフォーマットはJPEG,PNG,BMP,WBMP,GIFとなっている。

      
              import java.imageio.ImageIO;
          

      画像ファイルの読み込みはImageIO.read()メソッドを使う。最も簡単な使い方はFileクラスを 用いた方法で書式は
      public static BufferedImage read(File input)throws IOException
      となっている。
      例えば画像ファイル"lena.png"を読み込む場合以下の様に書く

      
              BufferedImage image;
              try {
                image=ImageIO.read(new File("lena.png"));
              } catch (IOException e) {
                e.printStackTrace();
              }
          
      あるいは単に
      
              Buffered Image image=ImageIO.read(new File("lena.png"));
          
      と書く。2つ目の場合は throws IOException指定する必要がある。

      画像ファイルの書き出しはImageIO.read()メソッドを使う。最も簡単な使い方はFileクラスを 用いた方法で書式は
      public static boolean write(RenderedImage im,
      String formatName,
      File output)
      throws IOException
      となっている。
      例えば画像ファイル"out.png"を書き出す場合以下の様に書く

      
      				try {
      					ImageIO.write(image, "png", new File("out.png"));
      				} catch (IOException e) {
      					e.printStackTrace();
      				}
          
      あるいは単に
      
              ImageIO.write(image, "png", new File("out.png"));
          
      と書く。2つ目の場合は throws IOException指定する必要がある。 すでに同じ名前のファイルが存在する場合、その内容は上書きされるので注意が必要。

      • サンプルプログラム
        • 画像ファイルを読み込み、表示させ、書き出すプログラム
          (※ファイル書き込みが発生するので実行には注意が必要)
        • 
          import java.awt.Container;
          import java.awt.Dimension;
          import java.awt.FlowLayout;
          import java.awt.Graphics;
          import java.awt.image.BufferedImage;
          import java.io.File;
          import java.io.IOException;
          
          import javax.imageio.ImageIO;
          import javax.swing.JFrame;
          import javax.swing.JOptionPane;
          import javax.swing.JPanel;
          
          public class ImageProcessing{
            JFrame frame;//メインウィンドウ
              JPanel panel;
          
            BufferedImage image;//バッファ領域(ダブルバッファリング用)
          
            Graphics fg;//描画領域用描画オブジェクト(グラフィックスコンテキスト)
            Graphics bg;//ダブルバッファリング用描画オブジェクト(グラフィックスコンテキスト)
          
          
            int screenW;//ウィンドウの幅
            int screenH;//ウィンドウの高さ
          
          
            double[][] work=new double[256][256];
          
            public void init() {
              //画面サイズの設定
              screenW=256;
              screenH=256;
          
              //フレームの設定
              frame=new JFrame();
              frame.setTitle("Image processing");
              frame.setSize(screenW,screenH);
              //frame.setResizable(false);//ウィンドウサイズを変更不可に設定
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          
              Container cont=frame.getContentPane();
              cont.setLayout(new FlowLayout(FlowLayout.CENTER,0,0));
              panel=new JPanel();
              //panel.addMouseListener(this);
              panel.setPreferredSize(new Dimension(screenW,screenH));
              cont.add(panel);
          
          
              frame.pack();
              frame.setVisible(true);
          
              //描画領域のサイズ調整
                  panel.setPreferredSize(new Dimension(screenW,screenH));
              frame.pack();
          
              //フレームに描画する準備
              image=(BufferedImage)panel.createImage(screenW, screenH);
              fg=panel.getGraphics();
              bg=image.getGraphics();
            }
          
            public void display() {
              //バッファ領域のイメージを描画領域へ転送
              fg.drawImage(image, 0, 0, panel);
            }
          
            public ImageProcessing(){
          
              init();
                try {
                image=ImageIO.read(new File("lena.png"));
              } catch (IOException e) {
                // TODO 自動生成された catch ブロック
                e.printStackTrace();
              }
          
              display();
              JOptionPane.showMessageDialog(null,"画像の読み込みました");
          
              try {
                ImageIO.write(image, "png", new File("out.png"));
              } catch (IOException e) {
                e.printStackTrace();
              }
              JOptionPane.showMessageDialog(null,"画像を書き出しました");
          
              while(true) {
                try {
                  Thread.sleep(1000);
                } catch (InterruptedException e) {
                  // TODO 自動生成された catch ブロック
                  e.printStackTrace();
                }
          
                display();
              }
            }
          
            public static void main(String[] args){
              new ImageProcessing();
            }
          }  
                  
        • 実行結果
        • 実行結果

    ←前へ      次へ→