/** * @author Hitomi Sakamoto * 作成日:2009/09/27 */ 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; /* メイン */ public static void main(String[] args){ /* 画像の読み込み */ image = loadImage("./img/画像へのパス"); 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]; //getRGB(イメージ、開始x、開始y、幅、高さ、配列、配列の開始位置、横幅); image.getRGB(0,0,w,h,pixels,0,w); int work[][] = new int[h][w]; int[][] R = new int[h][w]; int[][] G = new int[h][w]; int[][] B = new int[h][w]; 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)&0xff; //0から 255の領域に変換 G[j][i] = (work[j][i] >> 8)&0xff; //0から 255の領域に変換 B[j][i] = work[j][i] &0xff; } } //-----------------以下 画像処理を実際に行う---------------------- //------------------------ここまで-------------------------------- for(int j = 0;j < h;j++){ for(int i = 0;i < w;i++){ pixels[j*w+i] = R[j][i] << 16 | G[j][i] << 8 | B[j][i]; } } image.setRGB(0, 0, w, h, pixels, 0, w); /* * 画像の保存(BMPかJPEG形式のみにする) ※読み込んだ画像の拡張子と必ず対応させる。 * 画像の名前は任意で決める。 */ save(image,"画像の名前","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)); } }