package uk.co.mmscomputing.imageio.tiff;
import java.io.*;
public class TIFFCMYKInputStream extends FilterInputStream{
public TIFFCMYKInputStream(InputStream in)throws IOException{
super(in);
}
public int read()throws IOException{
double C=in.read()/255.0;
double M=in.read()/255.0;
double Y=in.read()/255.0;
double K=in.read()/255.0;
double R=C*(1.0-K)+K; R=1.0-((R<1.0)?R:1.0); // 1.0 − C(1.0 − K) - K
double G=M*(1.0-K)+K; G=1.0-((G<1.0)?G:1.0); // 1.0 − M(1.0 − K) - K
double B=Y*(1.0-K)+K; B=1.0-((B<1.0)?B:1.0); // 1.0 − Y(1.0 − K) - K
R*=255.0;G*=255.0;B*=255.0;
return (((int)R)<<16)|(((int)G)<<8)|((int)B);
}
public int read(byte[] buf)throws IOException{
throw new IOException(getClass().getName()+".read:\t\nInternal Error: Please use read(int[] buf,int off,int len).");
}
public int read(byte[] buf, int off, int len)throws IOException{
throw new IOException(getClass().getName()+".read:\t\nInternal Error: Please use read(int[] buf,int off,int len).");
}
public int read(int[] buf, int off, int len)throws IOException{
for(int i=0;i<len;i++){
int v=read();
if(v==-1){return (i==0)?-1:i;}
buf[off+i]=v;
}
return len;
}
}