/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package webcamstudio.mixers; import java.awt.image.BufferedImage; import java.awt.image.DataBufferInt; import java.io.DataInputStream; import java.io.IOException; import static java.lang.System.arraycopy; /** * * @author patrick (modified by karl) */ public class WSImage extends BufferedImage { private int[] data = null; private byte[] byteData = null; private int counter = 0; public WSImage(int w, int h, int type) { super(w, h, type); data = ((DataBufferInt) getRaster().getDataBuffer()).getData(); switch (super.getType()) { case TYPE_INT_RGB: byteData = new byte[data.length * 3]; break; case TYPE_INT_ARGB: break; } } public void setData(int[] srcData) { arraycopy(srcData, 0, data, 0, srcData.length); } public void convertByte(byte[] barr) { counter = 0; for (int i = 0; i < data.length; i++) { int int32 = 0xff000000; int int16 = (barr[counter++] & 0xff) << 16; int int8 = (barr[counter++] & 0xff) << 8; int int0 = (barr[counter++] & 0xff); data[i] = (int32 | int16 | int8 | int0); } } public void readFully(DataInputStream din) throws IOException { if (din.available() > 0) { din.readFully(byteData); convertByte(byteData); } } public byte[] getBytes() { counter = 0; switch (super.getType()) { case TYPE_INT_RGB: for (int i = 0; i < byteData.length; i += 3) { byteData[i] = (byte) ((data[counter] >> 16) & 0xFF); byteData[i + 1] = (byte) ((data[counter] >> 8) & 0xFF); byteData[i + 2] = (byte) ((data[counter]) & 0xFF); counter++; } break; case TYPE_INT_ARGB: for (int i = 0; i < byteData.length; i += 4) { byteData[i] = (byte) ((data[counter] >> 16) & 0xFF); byteData[i + 1] = (byte) ((data[counter] >> 8) & 0xFF); byteData[i + 2] = (byte) ((data[counter]) & 0xFF); counter++; } break; } return byteData; } }