| 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; |
| } |
| } |