package uk.co.mmscomputing.imageio.tiff;
import java.io.*;
// [1] Adobe TIFF6.pdf
class TIFFHorizontalDifferenceInputStream extends FilterInputStream{
private int width, spp, index;
private int pixel[];
public TIFFHorizontalDifferenceInputStream(InputStream in, int width, int spp){
super(in);
this.width = width * spp;
this.spp = spp;
pixel = new int[spp];
index = -1;
}
public int read()throws IOException{ // [1] p.64
int b = in.read();
if(b==-1){ return -1;} // end of file
index++;
if(index == width){ index = 0;} // new row
int sample = index%spp; // pixel sample (colour)
if(index < spp){ // if first pixel
pixel[sample] = (byte)b; // save samples
}else{ // else
pixel[sample] += (byte)b; // apply horizontal difference 'predictor'
}
return pixel[sample];
}
}