package uk.co.mmscomputing.device.twain; import java.util.*; import java.awt.*; import java.awt.image.*; import uk.co.mmscomputing.imageio.bmp.BMPMetadata; public class TwainBufferedImage extends BufferedImage{ static private String[] propertyNames = new String[]{"iiometadata"}; private BMPMetadata md = new BMPMetadata(); public TwainBufferedImage(int width, int height, int type){ super(width,height,type); // 24 bit int bitsPerPixel=(type==TYPE_BYTE_GRAY)?8:24; md.setWidth(width); md.setHeight(height); md.setBitsPerPixel(bitsPerPixel); md.setCompression(0); md.setImageSize((((width*bitsPerPixel+31)>>5)<<2)*height); md.setXPixelsPerMeter(2953); // 75 dpi md.setYPixelsPerMeter(2953); } public TwainBufferedImage(int width, int height, int type,IndexColorModel cm){ super(width,height,type,cm); // 1,4,8 bit md.setWidth(width); md.setHeight(height); int bitsPerPixel=8; switch(cm.getMapSize()){ case 2: bitsPerPixel=1; break; case 16: bitsPerPixel=4; break; // case 256: bitsPerPixel=8; break; } md.setBitsPerPixel(bitsPerPixel); md.setCompression(0); md.setXPixelsPerMeter(2953); // 75 dpi md.setYPixelsPerMeter(2953); md.setIndexColorModel(cm); md.setImageSize((((width*bitsPerPixel+31)>>5)<<2)*height); } public byte[] getBuffer(){ // 1,4,8,24 bit Raster r = getRaster(); DataBufferByte db = (DataBufferByte)r.getDataBuffer(); return db.getData(); } public void setXPixelsPerMeter(int v){ md.setXPixelsPerMeter(v); } public void setYPixelsPerMeter(int v){ md.setYPixelsPerMeter(v); } public void setPixelsPerMeter(int x,int y){ setXPixelsPerMeter(x); setYPixelsPerMeter(y); } public Object getProperty(String name){ if(name.equals("iiometadata")){return md;} if(name.equals("resolution")){ return ""+md.getXDotsPerInch(); } return Image.UndefinedProperty; } public String[] getPropertyNames(){ return propertyNames; } }