import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.StringTokenizer; import java.io.Serializable; public class Bitmap implements Serializable{ private int[][] bits; private int columns; private int rows; /** * Get the Rows value. * @return the Rows value. */ public int getRows() { return rows; } /** * Get the Columns value. * @return the Columns value. */ public int getColumns() { return columns; } public boolean isSet(int i, int j){ return (bits[i][j]!=0); } public void flip(int i, int j){ if (bits[i][j] == 0){ bits[i][j]=1; } else { bits[i][j]=0; } } Bitmap(){ this(0,0); } Bitmap(int rows, int cols){ bits=new int[rows][columns]; } Bitmap(String filename) throws IOException{ readFile(filename); } public void readFile(String filename) throws IOException{ BufferedReader infile= new BufferedReader(new FileReader(filename)); String firstLine = infile.readLine(); if (!firstLine.equals("P1")) throw new IOException("File format error"); StringTokenizer tokens = new StringTokenizer(infile.readLine(), " "); columns=Integer.parseInt(tokens.nextToken()); rows=Integer.parseInt(tokens.nextToken()); bits=new int[rows][columns]; for (int i=0; i< rows; i++){ String line=infile.readLine(); for (int j=0; j<columns; j++){ bits[i][j]=line.charAt(j)-'0'; } } } private boolean isIsolated(int row,int col,int threshold){ int found=0; if (bits[row][col]==0) { return false; } for (int i=row-1; i<=row+1; i++){ for (int j=col-1; j<= col+1; j++){ if (i>=0 && j>=0 && i< rows && j<columns) { found +=bits[i][j]; } } } return (found<=threshold); } public void filter(int threshold){ for (int i=0; i< rows; i++){ for (int j=0; j<columns; j++){ if (isIsolated(i,j,threshold)){ bits[i][j]=0; } } } } public String toString(){ String result=""; for (int i=0; i< rows; i++){ for (int j=0; j<columns; j++){ if (bits[i][j]==1) result += "*"; else result += " "; } result +="\n"; } return result; } public static void main(String [] args) throws IOException{ Bitmap unbLogo=new Bitmap ("noisy.pbm"); System.out.println(unbLogo); System.out.println("\f"); unbLogo.filter(1); System.out.println(unbLogo); System.out.println("\f"); unbLogo=new Bitmap ("noisy.pbm"); unbLogo.filter(2); System.out.println(unbLogo); System.out.println("\f"); unbLogo=new Bitmap ("noisy.pbm"); unbLogo.filter(4); System.out.println(unbLogo); } } //