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

📄 bmpimagereader.java

📁 java1.6众多例子参考
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
                        iis.readFully(palette, 0, sizeOfPalette);                        metadata.palette = palette;                        metadata.paletteSize = (int)colorsUsed;                    }                    metadata.bmpVersion = VERSION_3_NT;                    break;                default:                    throw new                        RuntimeException(I18N.getString("BMPImageReader2"));                }            } else if (size == 108 || size == 124) {                // Windows 4.x BMP                if (size == 108)                    metadata.bmpVersion = VERSION_4;                else if (size == 124)                    metadata.bmpVersion = VERSION_5;                // rgb masks, valid only if comp is BI_BITFIELDS                redMask = (int)iis.readUnsignedInt();                greenMask = (int)iis.readUnsignedInt();                blueMask = (int)iis.readUnsignedInt();                // Only supported for 32bpp BI_RGB argb                alphaMask = (int)iis.readUnsignedInt();                long csType = iis.readUnsignedInt();                int redX = iis.readInt();                int redY = iis.readInt();                int redZ = iis.readInt();                int greenX = iis.readInt();                int greenY = iis.readInt();                int greenZ = iis.readInt();                int blueX = iis.readInt();                int blueY = iis.readInt();                int blueZ = iis.readInt();                long gammaRed = iis.readUnsignedInt();                long gammaGreen = iis.readUnsignedInt();                long gammaBlue = iis.readUnsignedInt();                if (size == 124) {                    metadata.intent = iis.readInt();                    profileData = iis.readInt();                    profileSize = iis.readInt();                    iis.skipBytes(4);                }                metadata.colorSpace = (int)csType;                if (csType == LCS_CALIBRATED_RGB) {                    // All the new fields are valid only for this case                    metadata.redX = redX;                    metadata.redY = redY;                    metadata.redZ = redZ;                    metadata.greenX = greenX;                    metadata.greenY = greenY;                    metadata.greenZ = greenZ;                    metadata.blueX = blueX;                    metadata.blueY = blueY;                    metadata.blueZ = blueZ;                    metadata.gammaRed = (int)gammaRed;                    metadata.gammaGreen = (int)gammaGreen;                    metadata.gammaBlue = (int)gammaBlue;                }                // Read in the palette                int numberOfEntries = (int)((bitmapOffset-14-size) / 4);                int sizeOfPalette = numberOfEntries*4;                palette = new byte[sizeOfPalette];                iis.readFully(palette, 0, sizeOfPalette);                metadata.palette = palette;                metadata.paletteSize = numberOfEntries;                switch ((int)compression) {                case BI_JPEG:                case BI_PNG:                    if (size == 108) {                        imageType = VERSION_4_XP_EMBEDDED;                    } else if (size == 124) {                        imageType = VERSION_5_XP_EMBEDDED;                    }                    break;                default:                    if (bitsPerPixel == 1) {                        imageType = VERSION_4_1_BIT;                    } else if (bitsPerPixel == 4) {                        imageType = VERSION_4_4_BIT;                    } else if (bitsPerPixel == 8) {                        imageType = VERSION_4_8_BIT;                    } else if (bitsPerPixel == 16) {                        imageType = VERSION_4_16_BIT;                        if ((int)compression == BI_RGB) {                            redMask = 0x7C00;                            greenMask = 0x3E0;                            blueMask = 0x1F;                        }                    } else if (bitsPerPixel == 24) {                        imageType = VERSION_4_24_BIT;                    } else if (bitsPerPixel == 32) {                        imageType = VERSION_4_32_BIT;                        if ((int)compression == BI_RGB) {                            redMask   = 0x00FF0000;                            greenMask = 0x0000FF00;                            blueMask  = 0x000000FF;                        }                    }                                        metadata.redMask = redMask;                    metadata.greenMask = greenMask;                    metadata.blueMask = blueMask;                    metadata.alphaMask = alphaMask;                }            } else {                throw new                    RuntimeException(I18N.getString("BMPImageReader3"));            }        }        if (height > 0) {            // bottom up image            isBottomUp = true;        } else {            // top down image            isBottomUp = false;            height = Math.abs(height);        }        // Reset Image Layout so there's only one tile.        //Define the color space        ColorSpace colorSpace = ColorSpace.getInstance(ColorSpace.CS_sRGB);        if (metadata.colorSpace == PROFILE_LINKED ||            metadata.colorSpace == PROFILE_EMBEDDED) {            iis.mark();            iis.skipBytes(profileData - size);            byte[] profile = new byte[profileSize];            iis.readFully(profile, 0, profileSize);            iis.reset();            try {                if (metadata.colorSpace == PROFILE_LINKED)                    colorSpace =                        new ICC_ColorSpace(ICC_Profile.getInstance(new String(profile)));                else                    colorSpace =                        new ICC_ColorSpace(ICC_Profile.getInstance(profile));            } catch (Exception e) {                colorSpace = ColorSpace.getInstance(ColorSpace.CS_sRGB);            }        }        if (bitsPerPixel == 0 ||            compression == BI_JPEG || compression == BI_PNG )        {            // the colorModel and sampleModel will be initialzed            // by the  reader of embedded image            colorModel = null;            sampleModel = null;        } else if (bitsPerPixel == 1 || bitsPerPixel == 4 || bitsPerPixel == 8) {            // When number of bitsPerPixel is <= 8, we use IndexColorModel.            numBands = 1;            if (bitsPerPixel == 8) {                int[] bandOffsets = new int[numBands];                for (int i = 0; i < numBands; i++) {                    bandOffsets[i] = numBands -1 -i;                }                sampleModel =                    new PixelInterleavedSampleModel(DataBuffer.TYPE_BYTE,                                                    width, height,                                                    numBands,                                                    numBands * width,                                                    bandOffsets);            } else {                // 1 and 4 bit pixels can be stored in a packed format.                sampleModel =                    new MultiPixelPackedSampleModel(DataBuffer.TYPE_BYTE,                                                    width, height,                                                    bitsPerPixel);            }            // Create IndexColorModel from the palette.            byte r[], g[], b[];            if (imageType == VERSION_2_1_BIT ||                imageType == VERSION_2_4_BIT ||                imageType == VERSION_2_8_BIT) {                size = palette.length/3;                if (size > 256) {                    size = 256;                }                int off;                r = new byte[(int)size];                g = new byte[(int)size];                b = new byte[(int)size];                for (int i=0; i<(int)size; i++) {                    off = 3 * i;                    b[i] = palette[off];                    g[i] = palette[off+1];                    r[i] = palette[off+2];                }            } else {                size = palette.length/4;                if (size > 256) {                    size = 256;                }                int off;                r = new byte[(int)size];                g = new byte[(int)size];                b = new byte[(int)size];                for (int i=0; i<size; i++) {                    off = 4 * i;                    b[i] = palette[off];                    g[i] = palette[off+1];                    r[i] = palette[off+2];                }            }            if (ImageUtil.isIndicesForGrayscale(r, g, b))                colorModel =                    ImageUtil.createColorModel(null, sampleModel);            else                colorModel = new IndexColorModel(bitsPerPixel, (int)size, r, g, b);        } else if (bitsPerPixel == 16) {            numBands = 3;            sampleModel =                new SinglePixelPackedSampleModel(DataBuffer.TYPE_USHORT,                                                 width, height,                                                 new int[] {redMask, greenMask, blueMask});            colorModel =                new DirectColorModel(colorSpace,                                     16, redMask, greenMask, blueMask, 0,                                     false, DataBuffer.TYPE_USHORT);		           } else if (bitsPerPixel == 32) {            numBands = alphaMask == 0 ? 3 : 4;            // The number of bands in the SampleModel is determined by            // the length of the mask array passed in.            int[] bitMasks = numBands == 3 ?                new int[] {redMask, greenMask, blueMask} :                new int[] {redMask, greenMask, blueMask, alphaMask};                sampleModel =                    new SinglePixelPackedSampleModel(DataBuffer.TYPE_INT,                                                     width, height,                                                     bitMasks);                colorModel =                    new DirectColorModel(colorSpace,                                         32, redMask, greenMask, blueMask, alphaMask,                                         false, DataBuffer.TYPE_INT);        } else {            numBands = 3;            // Create SampleModel            int[] bandOffsets = new int[numBands];            for (int i = 0; i < numBands; i++) {                bandOffsets[i] = numBands -1 -i;            }            sampleModel =                new PixelInterleavedSampleModel(DataBuffer.TYPE_BYTE,                                                width, height,                                                numBands,                                                numBands * width,                                                bandOffsets);            colorModel =                ImageUtil.createColorModel(colorSpace, sampleModel);        }        originalSampleModel = sampleModel;        originalColorModel = colorModel;        // Reset to the start of bitmap; then jump to the        //start of image data        iis.reset();        iis.skipBytes(bitmapOffset);        gotHeader = true;           }    public Iterator getImageTypes(int imageIndex)      throws IOException {        checkIndex(imageIndex);        readHeader();        ArrayList list = new ArrayList(1);        list.add(new ImageTypeSpecifier(originalColorModel,                                        originalSampleModel));        return list.iterator();    }    public ImageReadParam getDefaultReadParam() {        return new ImageReadParam();    }    public IIOMetadata getImageMetadata(int imageIndex)      throws IOException {        checkIndex(imageIndex);        if (metadata == null) {            readHeader();        }        return metadata;    }    public IIOMetadata getStreamMetadata() throws IOException {        return null;    }    public boolean isRandomAccessEasy(int imageIndex) throws IOException {        checkIndex(imageIndex);        readHeader();        return metadata.compression == BI_RGB;    }    public BufferedImage read(int imageIndex, ImageReadParam param)        throws IOException {        if (iis == null) {            throw new IllegalStateException(I18N.getString("BMPImageReader5"));        }        checkIndex(imageIndex);        clearAbortRequest();        processImageStarted(imageIndex);        if (param == null)            param = getDefaultReadParam();        //read header        readHeader();        sourceRegion = new Rectangle(0, 0, 0, 0);        destinationRegion = new Rectangle(0, 0, 0, 0);        computeRegions(param, this.width, this.height,                       param.getDestination(),                       sourceRegion,                       destinationRegion);        scaleX = param.getSourceXSubsampling();        scaleY = param.getSourceYSubsampling();

⌨️ 快捷键说明

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