⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imageutil.java

📁 JAVA 所有包
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
            int dataTypeSize = DataBuffer.getDataTypeSize(dataType);            int[] bits = new int[numBands];            for (int i = 0; i < numBands; i++) {                bits[i] = dataTypeSize;            }            colorModel = new ComponentColorModel(colorSpace,                                                 bits,                                                 useAlpha,                                                 premultiplied,                                                 transparency,                                                 dataType);        } else if (sampleModel instanceof SinglePixelPackedSampleModel) {            SinglePixelPackedSampleModel sppsm =                (SinglePixelPackedSampleModel)sampleModel;            int[] bitMasks = sppsm.getBitMasks();            int rmask = 0;            int gmask = 0;            int bmask = 0;            int amask = 0;            numBands = bitMasks.length;            if (numBands <= 2) {                rmask = gmask = bmask = bitMasks[0];                if (numBands == 2) {                    amask = bitMasks[1];                }            } else {                rmask = bitMasks[0];                gmask = bitMasks[1];                bmask = bitMasks[2];                if (numBands == 4) {                    amask = bitMasks[3];                }            }            int[] sampleSize = sppsm.getSampleSize();            int bits = 0;            for (int i = 0; i < sampleSize.length; i++) {                bits += sampleSize[i];            }            if (colorSpace == null)                colorSpace = ColorSpace.getInstance(ColorSpace.CS_sRGB);            colorModel =                new DirectColorModel(colorSpace,                                     bits, rmask, gmask, bmask, amask,                                     false,                                     sampleModel.getDataType());        } else if (sampleModel instanceof MultiPixelPackedSampleModel) {            int bits =                ((MultiPixelPackedSampleModel)sampleModel).getPixelBitStride();            int size = 1 << bits;            byte[] comp = new byte[size];            for (int i = 0; i < size; i++)                comp[i] = (byte)(255 * i / (size - 1));            colorModel = new IndexColorModel(bits, size, comp, comp, comp);        }        return colorModel;    }    public static int getElementSize(SampleModel sm) {        int elementSize = DataBuffer.getDataTypeSize(sm.getDataType());                if (sm instanceof MultiPixelPackedSampleModel) {            MultiPixelPackedSampleModel mppsm =                (MultiPixelPackedSampleModel)sm;            return mppsm.getSampleSize(0) * mppsm.getNumBands();        } else if (sm instanceof ComponentSampleModel) {            return sm.getNumBands() * elementSize;        } else if (sm instanceof SinglePixelPackedSampleModel) {            return elementSize;        }                return elementSize * sm.getNumBands();            }        public static long getTileSize(SampleModel sm) {        int elementSize = DataBuffer.getDataTypeSize(sm.getDataType());        if (sm instanceof MultiPixelPackedSampleModel) {            MultiPixelPackedSampleModel mppsm =                (MultiPixelPackedSampleModel)sm;            return (mppsm.getScanlineStride() * mppsm.getHeight() +                   (mppsm.getDataBitOffset() + elementSize -1) / elementSize) *                   ((elementSize + 7) / 8);        } else if (sm instanceof ComponentSampleModel) {            ComponentSampleModel csm = (ComponentSampleModel)sm;            int[] bandOffsets = csm.getBandOffsets();            int maxBandOff = bandOffsets[0];            for (int i=1; i<bandOffsets.length; i++)                maxBandOff = Math.max(maxBandOff, bandOffsets[i]);            long size = 0;            int pixelStride = csm.getPixelStride();            int scanlineStride = csm.getScanlineStride();            if (maxBandOff >= 0)                size += maxBandOff + 1;            if (pixelStride > 0)                size += pixelStride * (sm.getWidth() - 1);            if (scanlineStride > 0)                size += scanlineStride * (sm.getHeight() - 1);            int[] bankIndices = csm.getBankIndices();            maxBandOff = bankIndices[0];            for (int i=1; i<bankIndices.length; i++)                maxBandOff = Math.max(maxBandOff, bankIndices[i]);            return size * (maxBandOff + 1) * ((elementSize + 7) / 8);        } else if (sm instanceof SinglePixelPackedSampleModel) {            SinglePixelPackedSampleModel sppsm =                (SinglePixelPackedSampleModel)sm;            long size = sppsm.getScanlineStride() * (sppsm.getHeight() - 1) +                        sppsm.getWidth();            return size * ((elementSize + 7) / 8);        }        return 0;    }    public static long getBandSize(SampleModel sm) {        int elementSize = DataBuffer.getDataTypeSize(sm.getDataType());        if (sm instanceof ComponentSampleModel) {            ComponentSampleModel csm = (ComponentSampleModel)sm;            int pixelStride = csm.getPixelStride();            int scanlineStride = csm.getScanlineStride();            long size = Math.min(pixelStride, scanlineStride);            if (pixelStride > 0)                size += pixelStride * (sm.getWidth() - 1);            if (scanlineStride > 0)                size += scanlineStride * (sm.getHeight() - 1);            return size * ((elementSize + 7) / 8);        } else            return getTileSize(sm);    }    /**     * Tests whether the color indices represent a gray-scale image.     *     * @param r The red channel color indices.     * @param g The green channel color indices.     * @param b The blue channel color indices.     * @return If all the indices have 256 entries, and are identical mappings,     *         return <code>true</code>; otherwise, return <code>false</code>.     */    public static boolean isIndicesForGrayscale(byte[] r, byte[] g, byte[] b) {        if (r.length != g.length || r.length != b.length)            return false;        int size = r.length;        if (size != 256)            return false;        for (int i = 0; i < size; i++) {            byte temp = (byte) i;            if (r[i] != temp || g[i] != temp || b[i] != temp)                return false;        }        return true;    }     /** Converts the provided object to <code>String</code> */    public static String convertObjectToString(Object obj) {        if (obj == null)            return "";                String s = "";        if (obj instanceof byte[]) {            byte[] bArray = (byte[])obj;            for (int i = 0; i < bArray.length; i++)                s += bArray[i] + " ";            return s;        }                if (obj instanceof int[]) {            int[] iArray = (int[])obj;            for (int i = 0; i < iArray.length; i++)                s += iArray[i] + " " ;            return s;        }                if (obj instanceof short[]) {            short[] sArray = (short[])obj;            for (int i = 0; i < sArray.length; i++)                s += sArray[i] + " " ;            return s;        }                return obj.toString();            }        /** Checks that the provided <code>ImageWriter</code> can encode     * the provided <code>ImageTypeSpecifier</code> or not.  If not, an     * <code>IIOException</code> will be thrown.     * @param writer The provided <code>ImageWriter</code>.     * @param type The image to be tested.     * @throws IIOException If the writer cannot encoded the provided image.     */    public static final void canEncodeImage(ImageWriter writer,                                            ImageTypeSpecifier type)        throws IIOException {	ImageWriterSpi spi = writer.getOriginatingProvider();  	if(type != null && spi != null && !spi.canEncodeImage(type))  {	    throw new IIOException(I18N.getString("ImageUtil2")+" "+                                   writer.getClass().getName());	}    }    /** Checks that the provided <code>ImageWriter</code> can encode     * the provided <code>ColorModel</code> and <code>SampleModel</code>.     * If not, an <code>IIOException</code> will be thrown.     * @param writer The provided <code>ImageWriter</code>.     * @param colorModel The provided <code>ColorModel</code>.     * @param sampleModel The provided <code>SampleModel</code>.     * @throws IIOException If the writer cannot encoded the provided image.     */    public static final void canEncodeImage(ImageWriter writer,                                             ColorModel colorModel,                                            SampleModel sampleModel)        throws IIOException {	ImageTypeSpecifier type = null;	if (colorModel != null && sampleModel != null)	    type = new ImageTypeSpecifier(colorModel, sampleModel);	canEncodeImage(writer, type);    }    /**     * Returns whether the image has contiguous data across rows.     */    public static final boolean imageIsContiguous(RenderedImage image) {        SampleModel sm;        if(image instanceof BufferedImage) {            WritableRaster ras = ((BufferedImage)image).getRaster();            sm = ras.getSampleModel();        } else {            sm = image.getSampleModel();        }                if (sm instanceof ComponentSampleModel) {            // Ensure image rows samples are stored contiguously            // in a single bank.            ComponentSampleModel csm = (ComponentSampleModel)sm;            if (csm.getPixelStride() != csm.getNumBands()) {                return false;            }            int[] bandOffsets = csm.getBandOffsets();            for (int i = 0; i < bandOffsets.length; i++) {                if (bandOffsets[i] != i) {                    return false;                }            }            int[] bankIndices = csm.getBankIndices();            for (int i = 0; i < bandOffsets.length; i++) {                if (bankIndices[i] != 0) {                    return false;                }            }            return true;        }        // Otherwise true if and only if it's a bilevel image with        // a MultiPixelPackedSampleModel, 1 bit per pixel, and 1 bit        // pixel stride.        return ImageUtil.isBinary(sm);    }}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -