이미지를 읽거나 쓸 때 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()));
}
}
많은 코드가 있습니다. –