/** * @author Hitomi Sakamoto * 作成日:2009/09/27 */ /* * @revised Koutarou Aniya * 改良日:2013/04/26 */ import java.awt.image.*; import java.io.*; import javax.imageio.*; /** * 3年次 社会情報学及び知能情報学演習のメインプログラム */ public class Enshu{ /* 変数の定義 */ private static BufferedImage image; private static int w; private static int h; private static int w1; private static int h1; /* メイン */ public static void main(String[] args){ /* 画像の読み込み */ image = loadImage("./img/BOAT.bmp"); try{ Process(image); }catch(Exception e){ } } /* 処理部 */ public static void Process(BufferedImage image)throws Exception{ //画像の横幅と縦幅取得 w = image.getWidth(); h = image.getHeight(); //画像情報抽出 int[] pixels = new int[w * h]; //引数 Pixelsgrabber(イメージ、開始x、開始y、幅、高さ、配列、配列の開始位置、横幅); PixelGrabber pg = new PixelGrabber(image,0,0,w,h,pixels,0,w); try{ pg.grabPixels(); }catch(InterruptedException e){;} int work[][] = new int[h][w]; int[][] R = new int[h][w]; int[][] G = new int[h][w]; int[][] B = new int[h][w]; int[][] IR = new int[h][w]; int[][] IG = new int[h][w]; int[][] IB = new int[h][w]; double[][] XR = new double[h][w]; double[][] XG = new double[h][w]; double[][] XB = new double[h][w]; //-------出力画像のサイズの設定----------// h1 = h; w1 = w; //----------------------------------// int[][] OR = new int[h1][w1]; int[][] OG = new int[h1][w1]; int[][] OB = new int[h1][w1]; double[][] YR = new double[h1][w1]; double[][] YG = new double[h1][w1]; double[][] YB = new double[h1][w1]; int[][] RO = new int[h1][w1]; int[][] GO = new int[h1][w1]; int[][] BO = new int[h1][w1]; int[] pixels1 = new int[w1 * h1]; for(int j = 0;j < h;j++){ for(int i = 0;i < w;i++){ //1次元から2次元配列への変換 work[j][i] = pixels[j*w+i]; //RGB分割 R[j][i] = (work[j][i] >> 16)&0x0ff; //0から 255の領域に変換 G[j][i] = (work[j][i] >> 8)&0x0ff; //0から 255の領域に変換 B[j][i] = work[j][i] &0x0ff; IR[j][i] = R[j][i]; IG[j][i] = G[j][i]; IB[j][i] = B[j][i]; XR[j][i] = (double)R[j][i]; XG[j][i] = (double)G[j][i]; XB[j][i] = (double)B[j][i]; } } //-----------------以下 画像処理を実際に行う---------------------- //最後にできあがった配列の数値をint型の場合RO,GO,BOに //double型の場合YR,YG,YBに格納すること System.out.println("test"); //------------------------ここまで-------------------------------- //int型の場合後者を、double型の場合前者を除外しなさい for(int j = 0;j < h1;j++){ for(int i = 0;i < w1;i++){ RO[j][i] = OR[j][i]; GO[j][i] = OG[j][i]; BO[j][i] = OB[j][i]; /* RO[j][i] = (int)YR[j][i]; GO[j][i] = (int)YG[j][i]; BO[j][i] = (int)YB[j][i]; */ } } for(int j = 0;j < h1;j++){ for(int i = 0;i < w1;i++){ //1次元から2次元配列への変換 pixels1[j*w1+i] = RO[j][i] << 16 | GO[j][i] << 8 | BO[j][i]; } } BufferedImage img = new BufferedImage(w1,h1, BufferedImage.TYPE_INT_RGB); img.setRGB(0, 0, w1, h1, pixels1, 0, w1); /* 画像の保存(BMPかJPEG形式のみにする) * 画像の名前は任意で決める。 */ save(img,"BOATtest2","BMP"); } public static BufferedImage loadImage(String filename){ InputStream is = null; try { is = new FileInputStream(filename); BufferedImage img = ImageIO.read(is); return img; } catch (Exception e) { throw new RuntimeException(e); } finally { if(is != null){ try { is.close(); } catch (IOException e) {} } } } public static void save(BufferedImage img, String filename ,String filetype) throws IOException { ImageIO.write(img, filetype, new File("./Enshu/"+filename+"."+filetype)); } }