package edu.mbl.jif.imaging.util; import java.awt.*; import java.awt.color.*; import java.awt.image.*; public class ImgInfoDumper { static StringBuffer sBuffer = new StringBuffer(); public static String dump(BufferedImage image) { sBuffer = new StringBuffer(); dumpAttributes(image); dumpColorModel(image.getColorModel()); dumpRaster(image.getRaster()); return sBuffer.toString(); } public static void dumpAttributes(BufferedImage image) { sBuffer.append("BufferedImage AttibutesS:"); sBuffer.append("\n"); sBuffer.append(" instanceOf "+image.getClass().getName()); sBuffer.append("\n"); sBuffer.append(" height="+image.getHeight()); sBuffer.append("\n"); sBuffer.append(" width="+image.getWidth()); sBuffer.append("\n"); sBuffer.append(" minX="+image.getMinX()); sBuffer.append("\n"); sBuffer.append(" minY="+image.getMinY()); sBuffer.append("\n"); sBuffer.append(" type="+image.getType()+" ("); sBuffer.append(getImageTypeString(image.getType())); sBuffer.append(')'); sBuffer.append("\n"); sBuffer.append(" isAlphaPremultiplied="+image.isAlphaPremultiplied()); } public static String getImageTypeString(int type) { switch(type) { case BufferedImage.TYPE_CUSTOM: return "TYPE_CUSTOM"; case BufferedImage.TYPE_INT_RGB: return "TYPE_INT_RGB"; case BufferedImage.TYPE_INT_ARGB: return "TYPE_INT_ARGB"; case BufferedImage.TYPE_INT_ARGB_PRE: return "TYPE_INT_ARGB_PRE"; case BufferedImage.TYPE_INT_BGR: return "TYPE_INT_BGR"; case BufferedImage.TYPE_3BYTE_BGR: return "TYPE_3BYTE_BGR"; case BufferedImage.TYPE_4BYTE_ABGR: return "TYPE_4BYTE_ABGR"; case BufferedImage.TYPE_4BYTE_ABGR_PRE: return "TYPE_4BYTE_ABGR_PRE"; case BufferedImage.TYPE_USHORT_565_RGB: return "TYPE_USHORT_565_RGB"; case BufferedImage.TYPE_USHORT_555_RGB: return "TYPE_USHORT_555_RGB"; case BufferedImage.TYPE_BYTE_GRAY: return "TYPE_BYTE_GRAY"; case BufferedImage.TYPE_USHORT_GRAY: return "TYPE_USHORT_GRAY"; case BufferedImage.TYPE_BYTE_BINARY: return "TYPE_BYTE_BINARY"; case BufferedImage.TYPE_BYTE_INDEXED: return "TYPE_BYTE_INDEXED"; default: return "unknown type?"; } } public static void dumpColorModel(ColorModel colorModel) { dumpColorSpace(colorModel.getColorSpace()); sBuffer.append("\n"); sBuffer.append("COLOR MODEL:"); sBuffer.append("\n"); sBuffer.append(" instanceOf "+colorModel.getClass().getName()); sBuffer.append("\n"); sBuffer.append(" hasAlpha="+colorModel.hasAlpha()); sBuffer.append("\n"); sBuffer.append(" isAlphaPremultiplied="+colorModel.isAlphaPremultiplied()); sBuffer.append("\n"); sBuffer.append( " transparency="+colorModel.getTransparency()+" ("); sBuffer.append(getTransparencyString(colorModel.getTransparency())); sBuffer.append(')'); sBuffer.append("\n"); sBuffer.append( " transferType="+colorModel.getTransferType()+" ("); sBuffer.append(getTypeString(colorModel.getTransferType())); sBuffer.append(')'); sBuffer.append("\n"); sBuffer.append(" numComponents="+colorModel.getNumComponents()); sBuffer.append("\n"); sBuffer.append(" numColorComponents="+colorModel.getNumColorComponents()); sBuffer.append("\n"); sBuffer.append(" pixelSize(bits/pixel)="+colorModel.getPixelSize()); for(int i=0, ub=colorModel.getNumComponents(); i<ub; ++i){ sBuffer.append("\n"); sBuffer.append(" componentSize[" + i + "]="+colorModel.getComponentSize(i)); } if (colorModel instanceof IndexColorModel) dumpIndexColorModel((IndexColorModel)colorModel); else if (colorModel instanceof PackedColorModel) dumpPackedColorModel((PackedColorModel)colorModel); } public static void dumpIndexColorModel(IndexColorModel colorModel) { sBuffer.append("\n"); sBuffer.append(" mapSize="+colorModel.getMapSize()); sBuffer.append("\n"); sBuffer.append(" isValid="+colorModel.isValid()); sBuffer.append("\n"); sBuffer.append(" transparentPixel="+colorModel.getTransparentPixel()); } public static void dumpPackedColorModel(PackedColorModel colorModel) { int[] masks = colorModel.getMasks(); for(int i=0; i<masks.length; ++i) { sBuffer.append("\n"); sBuffer.append(" masks[" + i + "]=" + Integer.toHexString(masks[i])); } } public static String getTransparencyString(int transparency) { switch(transparency) { case Transparency.OPAQUE: return "OPAQUE"; case Transparency.BITMASK: return "BITMASK"; case Transparency.TRANSLUCENT: return "TRANSLUCENT"; default: return "unknown transparency?"; } } public static String getTypeString(int type) { switch(type) { case DataBuffer.TYPE_BYTE: return "BYTE"; case DataBuffer.TYPE_USHORT: return "USHORT"; case DataBuffer.TYPE_SHORT: return "SHORT"; case DataBuffer.TYPE_INT: return "INT"; case DataBuffer.TYPE_FLOAT: return "FLOAT"; case DataBuffer.TYPE_DOUBLE: return "DOUBLE"; default: return "unknown type?"; } } public static void dumpColorSpace(ColorSpace colorSpace) { sBuffer.append("\n"); sBuffer.append("COLOR SPACE:"); sBuffer.append("\n"); sBuffer.append(" instanceOf "+colorSpace.getClass().getName()); sBuffer.append("\n"); sBuffer.append(" isCS_sRGB="+colorSpace.isCS_sRGB()); sBuffer.append("\n"); sBuffer.append( " type="+colorSpace.getType()+" ("); sBuffer.append(getColorSpaceTypeString(colorSpace.getType())); sBuffer.append(')'); sBuffer.append("\n"); sBuffer.append(" numComponents="+colorSpace.getNumComponents()); for(int i=0, ub=colorSpace.getNumComponents(); i<ub; ++i) { sBuffer.append("\n"); sBuffer.append(" name[" + i + "]="+colorSpace.getName(i)); sBuffer.append(", minValue=" + colorSpace.getMinValue(i)); sBuffer.append(", maxValue=" + colorSpace.getMaxValue(i)); } } public static String getColorSpaceTypeString(int type) { switch(type) { case ColorSpace.TYPE_XYZ: return "TYPE_XYZ"; case ColorSpace.TYPE_Lab: return "TYPE_Lab"; case ColorSpace.TYPE_Luv: return "TYPE_Luv"; case ColorSpace.TYPE_YCbCr: return "TYPE_YCbCr"; case ColorSpace.TYPE_Yxy: return "TYPE_Yxy"; case ColorSpace.TYPE_RGB: return "TYPE_RGB"; case ColorSpace.TYPE_GRAY: return "TYPE_GRAY"; case ColorSpace.TYPE_HSV: return "TYPE_HSV"; case ColorSpace.TYPE_HLS: return "TYPE_HLS"; case ColorSpace.TYPE_CMYK: return "TYPE_CMYK"; case ColorSpace.TYPE_CMY: return "TYPE_CMY"; case ColorSpace.TYPE_2CLR: return "TYPE_2CLR"; case ColorSpace.TYPE_3CLR: return "TYPE_3CLR"; case ColorSpace.TYPE_4CLR: return "TYPE_4CLR"; case ColorSpace.TYPE_5CLR: return "TYPE_5CLR"; case ColorSpace.TYPE_6CLR: return "TYPE_6CLR"; case ColorSpace.TYPE_7CLR: return "TYPE_7CLR"; case ColorSpace.TYPE_8CLR: return "TYPE_8CLR"; case ColorSpace.TYPE_9CLR: return "TYPE_9CLR"; case ColorSpace.TYPE_ACLR: return "TYPE_ACLR"; case ColorSpace.TYPE_BCLR: return "TYPE_BCLR"; case ColorSpace.TYPE_CCLR: return "TYPE_CCLR"; case ColorSpace.TYPE_DCLR: return "TYPE_DCLR"; case ColorSpace.TYPE_ECLR: return "TYPE_ECLR"; case ColorSpace.TYPE_FCLR: return "TYPE_FCLR"; default: return "unknown type?"; } } public static void dumpRaster(WritableRaster raster) { sBuffer.append("\n"); sBuffer.append("RASTER:"); sBuffer.append("\n"); sBuffer.append(" instanceOf "+raster.getClass().getName()); sBuffer.append("\n"); sBuffer.append(" height="+raster.getHeight()); sBuffer.append("\n"); sBuffer.append(" width="+raster.getWidth()); sBuffer.append("\n"); sBuffer.append(" minX="+raster.getMinX()); sBuffer.append("\n"); sBuffer.append(" minY="+raster.getMinY()); sBuffer.append("\n"); sBuffer.append(" sampleModelTranslateX="+raster.getSampleModelTranslateX()); sBuffer.append("\n"); sBuffer.append(" sampleModelTranslateY="+raster.getSampleModelTranslateY()); sBuffer.append("\n"); sBuffer.append(" numBands="+raster.getNumBands()); sBuffer.append("\n"); sBuffer.append(" numDataElements="+raster.getNumDataElements()); sBuffer.append("\n"); sBuffer.append( " transferType="+raster.getTransferType()+" ("); sBuffer.append(getTypeString(raster.getTransferType())); sBuffer.append(')'); sBuffer.append("\n"); sBuffer.append(" parent is null="+(null==raster.getParent())); dumpDataBuffer(raster.getDataBuffer()); dumpSampleModel(raster.getSampleModel()); } public static void dumpDataBuffer(DataBuffer dataBuffer) { sBuffer.append("\n"); sBuffer.append("DATA BUFFER:"); sBuffer.append("\n"); sBuffer.append(" instanceOf "+dataBuffer.getClass().getName()); sBuffer.append("\n"); sBuffer.append(" dataType="+dataBuffer.getDataType()+" ("); sBuffer.append(getTypeString(dataBuffer.getDataType())); sBuffer.append(')'); sBuffer.append("\n"); sBuffer.append(" numBanks="+dataBuffer.getNumBanks()); sBuffer.append("\n"); sBuffer.append(" size="+dataBuffer.getSize()); for(int i=0, ub=dataBuffer.getNumBanks(); i<ub; ++i) { sBuffer.append("\n"); sBuffer.append(" offset["+i+"]="+dataBuffer.getOffsets()[i]); } } public static void dumpSampleModel(SampleModel sampleModel) { sBuffer.append("\n"); sBuffer.append("SAMPLE MODEL:"); sBuffer.append("\n"); sBuffer.append(" instanceOf "+sampleModel.getClass().getName()); sBuffer.append("\n"); sBuffer.append(" height="+sampleModel.getHeight()); sBuffer.append("\n"); sBuffer.append(" width="+sampleModel.getWidth()); sBuffer.append("\n"); sBuffer.append(" transferType="+sampleModel.getTransferType()+" ("); sBuffer.append(getTypeString(sampleModel.getTransferType())); sBuffer.append(')'); sBuffer.append("\n"); sBuffer.append(" dataType="+sampleModel.getDataType()+" ("); sBuffer.append(getTypeString(sampleModel.getDataType())); sBuffer.append(')'); sBuffer.append("\n"); sBuffer.append(" numBands="+sampleModel.getNumBands()); sBuffer.append("\n"); sBuffer.append(" numDataElements="+sampleModel.getNumDataElements()); int[] sampleSize = sampleModel.getSampleSize(); for(int i=0, ub=sampleSize.length; i<ub; ++i) { sBuffer.append("\n"); sBuffer.append(" sampleSize["+i+"]="+sampleSize[i]); } if (sampleModel instanceof SinglePixelPackedSampleModel) dumpSinglePixelPackedSampleModel((SinglePixelPackedSampleModel)sampleModel); else if (sampleModel instanceof MultiPixelPackedSampleModel) dumpMultiPixelPackedSampleModel((MultiPixelPackedSampleModel)sampleModel); else if (sampleModel instanceof ComponentSampleModel) dumpComponentSampleModel((ComponentSampleModel)sampleModel); } public static void dumpSinglePixelPackedSampleModel(SinglePixelPackedSampleModel sampleModel) { sBuffer.append("\n"); sBuffer.append(" scanlineStride="+sampleModel.getScanlineStride()); int[] bitMasks = sampleModel.getBitMasks(); for(int i=0; i<bitMasks.length; ++i) { sBuffer.append("\n"); sBuffer.append(" bitmasks[" + i + "]=" + Integer.toHexString(bitMasks[i])); } } public static void dumpMultiPixelPackedSampleModel(MultiPixelPackedSampleModel sampleModel) { sBuffer.append("\n"); sBuffer.append(" scanlineStride="+sampleModel.getScanlineStride()); sBuffer.append("\n"); sBuffer.append(" pixelBitStride="+sampleModel.getPixelBitStride()); } public static void dumpComponentSampleModel(ComponentSampleModel sampleModel) { sBuffer.append("\n"); sBuffer.append(" scanlineStride="+sampleModel.getScanlineStride()); sBuffer.append("\n"); sBuffer.append(" pixelStride="+sampleModel.getPixelStride()); int[] bandOffsets = sampleModel.getBandOffsets(); for(int i=0; i<bandOffsets.length; ++i) { sBuffer.append("\n"); sBuffer.append(" bandOffsets[" + i + "]=" + bandOffsets[i]); } int[] bankIndices = sampleModel.getBankIndices(); for(int i=0; i<bankIndices.length; ++i) { sBuffer.append("\n"); sBuffer.append(" bankIndices[" + i + "]=" + bankIndices[i]); } } }