94 lines
2.0 KiB
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;
|
|
}
|
|
}
|