package uk.co.mmscomputing.imageio.jpeg;
import java.io.*;
public class YCbCrJFIFOutputStream extends JFIFOutputStream{
public YCbCrJFIFOutputStream(OutputStream out, int height, int width)throws IOException{
super(out,height,width);
}
protected void setTables()throws IOException{
setZZQuantizationTable(0,JPEGConstants.LQT2); // Y,Gray,(RGB) component
setRawDCHuffmanTable(0,JPEGConstants.HLDCTable);
setRawACHuffmanTable(0,JPEGConstants.HLACTable);
setZZQuantizationTable(1,JPEGConstants.CQT2); // Cb,Cr Component
setRawDCHuffmanTable(1,JPEGConstants.HCDCTable);
setRawACHuffmanTable(1,JPEGConstants.HCACTable);
defineQuantizationTables(); // write QTs
defineHuffmanTables(); // write HTs
hv = new int[3];
hv[0] = 0x22; // (Hi<<4)|Vi
hv[1] = 0x11;
hv[2] = 0x11;
q = new int[3];
q[0] = 0; // quantization table Y=0, Cb=Cr=1
q[1] = 1;
q[2] = 1;
sel = new int[3];
sel[0]= 0; // DC,AC code table Y=0, Cb=Cr=1
sel[1]= 1;
sel[2]= 1;
}
public void writeInt(int c)throws IOException{
super.write((c>>16)&0x000000FF); // Y
super.write((c>> 8)&0x000000FF); // Cb
super.write( c &0x000000FF); // Cr
}
// use for YCbCr pictures (three components)
//public void write(byte[] buf, int off, int len)throws IOException{ // byte[] : samples divided into bytes
// super.write(buf,off,len);
//}
}
// [1] JPEG File Interchange Format (JFIF)
// Version 1.02 [1992-09-01]
// http://www.jpeg.org/public/jfif.pdf [last accessed 2005-11-28]