2012-08-22 2 views
0

이미지를 읽거나 쓸 때 java를 사용하고 코드가 있습니다.Java에서 읽기/쓰기 이미지

double[] data = Image.load("src/chap08_romsrams/common/lena256.ppm", "../common/lena256.ppm"); 

이 :하지만 donno에서는 이러한 코드와 함께 제공되는 샘플 데모 사실

는 사용이 같다 ... 특히 인수 문자열에서 코드를 사용하기 :

Image.write(l, "P3", 256, "src/chap08_romsrams/ex1_roms/lena_processed.ppm", "lena_processed.ppm"); 

는 어떻게 이러한 기능은 이미지를 읽기/쓰기하는 데 사용할 수있는,이 전 자바 파일과 같은 폴더에있다 lena.ppm라는 256 * 256 이미지를 가지고 있다고 가정 해 봅시다 ...?

많은 감사!

import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.PrintStream; 
import java.util.List; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Image { 
public static double[] load(String... fn) { 
    InputStream in = null; 

    for (String string : fn) { 
     try { 
      in = new FileInputStream(string); 
     } catch (IOException e) { 
      /* Empty */ 
     } 
     if (in != null) break; 
    } 

    if (in == null) { 
     throw new RuntimeException("Failed to load input image in Image.load(String...), tried to load image from " + fn); 
    } 

    BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 

    try { 
     String type = reader.readLine(); // Type 
     reader.readLine(); // Comment 
     String res = reader.readLine(); // Dimensions 
     reader.readLine(); // Intensity range 

     Pattern p = Pattern.compile("(\\d+) (\\d+)"); 
     Matcher m = p.matcher(res); 
     m.matches(); 
     Integer width = Integer.parseInt(m.group(1)); 
     Integer height = Integer.parseInt(m.group(2)); 

     System.err.println(width + "x" + height); 

     double[] data = new double[width * height * ((type.equals("P3")) ? 3 : 1)]; 
     String line; 
     int i = 0; 
     while((line = reader.readLine()) != null) 
      data[i++] = Integer.parseInt(line); 

     reader.close(); 

     return data; 

    } catch(IOException e) { 
     throw new RuntimeException(e); 
    } 
} 

public static void write(List<Double> data, String... fn) { 
    write(data, "P2", 1024, fn); 
} 

public static void write(List<Double> data, String type, int width, String... fn) { 
    OutputStream out = null; 

    for (String string : fn) { 
     try { 
      out = new FileOutputStream(string); 
     } catch (IOException e) { 
      /* Empty */ 
     } 
     if (out != null) break; 
    } 

    if (out == null) { 
     throw new RuntimeException("Failed to file for output in Image.write(List<Double>, String, int, String...), tried to open " + fn); 
    } 

    PrintStream ps = new PrintStream(out); 

    ps.println(type); 
    int height = data.size()/(width * ((type.equals("P3") ? 3 : 1))); //1024; 
    ps.println("#generated"); 
    ps.println("" + width + " " + height); 
    ps.println("255"); 
    for(Double d : data) 
     ps.println((int)(d.doubleValue())); 
} 

}

+0

많은 코드가 있습니다. –

답변

1

Java Imaging API을 시도하지 않습니다. Image IO를 수행하는 방법은 example입니다. 호프가 도움이 되었기를 바랍니다.

+0

이렇게하면 [검색] (http://java.sun.com/javase/technologies/desktop/media)에 더 많이 추가됩니다. – pratikabu

관련 문제