package uk.co.mmscomputing.io; import java.io.*; public class RGBInputStream extends IntFilterInputStream{ private int spp; // samples per pixel private boolean alpha; public RGBInputStream(InputStream in,int spp,boolean alpha)throws IOException{ super(in); this.spp=spp; this.alpha=alpha; } public RGBInputStream(InputStream in,int spp)throws IOException{ this(in,spp,false); } public int read()throws IOException{ int rgb=0xFF000000; // alpha = opaque rgb|=(in.read()&0x00FF)<<16; rgb|=(in.read()&0x00FF)<< 8; rgb|=(in.read()&0x00FF); if(alpha){ for(int i=3;i<(spp-1);i++){in.read();} rgb|=(in.read()&0x00FF)<<24; // alpha }else{ for(int i=3;i<spp;i++){in.read();} } return rgb; } public int read(byte[] b)throws IOException{ throw new IOException(getClass().getName()+".read:\t\nInternal Error: Please use read(int[] buf)."); } public int read(byte[] b, 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[] b)throws IOException{ int i=0; while(i<b.length){ b[i]=read();i++;} return i; } public int read(int[] b, int off, int len)throws IOException{ int i=0; while(i<len){ b[off+i]=read();i++;} return i; } }