openjpeg/j2kviewer/src/PgmImage.java

94 lines
2.0 KiB
Java

import java.awt.*;
import java.awt.image.*;
import java.net.*;
import java.io.*;
import java.util.regex.*;
class PgmImage extends Component
{
private Socket s;
private BufferedReader in;
private int x, y;
PgmImage()
{
}
private String read()
{
try { return in.readLine(); }
catch (IOException e) {
e.printStackTrace();
return null;
}
}
public Image open(String filename)
{
String str;
Pattern pat;
Matcher mat;
int bytes, width, height, depth;
FileInputStream fis;
try {
in = new BufferedReader(
new InputStreamReader(
fis = new FileInputStream(
new File(filename))));
pat = Pattern.compile("^P5$");
mat = pat.matcher(str = read());
mat.matches();
pat = Pattern.compile("^(\\d+) (\\d+)$");
mat = pat.matcher(str = read());
mat.matches();
x = new Integer(mat.group(1)).intValue();
y = new Integer(mat.group(2)).intValue();
width = x;
height = y;
depth = 1;
pat = Pattern.compile("^255$");
mat = pat.matcher(str = read());
mat.matches();
bytes = x*y;
char[] buf = new char[bytes];
int r, offset = 0;
while (bytes > 0) {
try { r = in.read(buf, offset, bytes); offset += r; bytes -= r; }
catch (IOException e) { e.printStackTrace(); }
}
int[] buf2 = new int[buf.length];
if (depth == 3) {
for (int i = 0; i < buf.length/3; ++i)
buf2[i] = 0xFF << 24 | buf[3*i] << 16 | buf[3*i+1] << 8 | buf[3*i+2];
} else {
for (int i = 0; i < buf.length; ++i)
buf2[i] = 0xFF << 24 | buf[i] << 16 | buf[i] << 8 | buf[i];
}
fis.close();
return createImage(new MemoryImageSource(width, height, buf2, 0, width));
} catch (IOException e) { e.printStackTrace(); }
return null;
}
public void close()
{
}
public boolean bye()
{
return true;
}
public int getXOffset()
{
return x;
}
public int getYOffset()
{
return y;
}
}