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

📄 bmpimage.java

📁 源码包含生成 PDF 和 HTML 的类库
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
            }            readPalette(sizeOfPalette);        } else {                        compression = readDWord(inputStream);            imageSize = readDWord(inputStream);            xPelsPerMeter = readLong(inputStream);            yPelsPerMeter = readLong(inputStream);            long colorsUsed = readDWord(inputStream);            long colorsImportant = readDWord(inputStream);                        switch((int)compression) {                case BI_RGB:                    properties.put("compression", "BI_RGB");                    break;                                    case BI_RLE8:                    properties.put("compression", "BI_RLE8");                    break;                                    case BI_RLE4:                    properties.put("compression", "BI_RLE4");                    break;                                    case BI_BITFIELDS:                    properties.put("compression", "BI_BITFIELDS");                    break;            }                        properties.put("x_pixels_per_meter", new Long(xPelsPerMeter));            properties.put("y_pixels_per_meter", new Long(yPelsPerMeter));            properties.put("colors_used", new Long(colorsUsed));            properties.put("colors_important", new Long(colorsImportant));                        if (size == 40) {                // Windows 3.x and Windows NT                switch((int)compression) {                                        case BI_RGB:  // No compression                    case BI_RLE8:  // 8-bit RLE compression                    case BI_RLE4:  // 4-bit RLE compression                                                if (bitsPerPixel == 1) {                            imageType = VERSION_3_1_BIT;                        } else if (bitsPerPixel == 4) {                            imageType = VERSION_3_4_BIT;                        } else if (bitsPerPixel == 8) {                            imageType = VERSION_3_8_BIT;                        } else if (bitsPerPixel == 24) {                            imageType = VERSION_3_24_BIT;                        } else if (bitsPerPixel == 16) {                            imageType = VERSION_3_NT_16_BIT;                            redMask = 0x7C00;                            greenMask = 0x3E0;                            blueMask = 0x1F;                            properties.put("red_mask", new Integer(redMask));                            properties.put("green_mask", new Integer(greenMask));                            properties.put("blue_mask", new Integer(blueMask));                        } else if (bitsPerPixel == 32) {                            imageType = VERSION_3_NT_32_BIT;                            redMask   = 0x00FF0000;                            greenMask = 0x0000FF00;                            blueMask  = 0x000000FF;                            properties.put("red_mask", new Integer(redMask));                            properties.put("green_mask", new Integer(greenMask));                            properties.put("blue_mask", new Integer(blueMask));                        }                        // Read in the palette                        int numberOfEntries = (int)((bitmapOffset-14-size) / 4);                        int sizeOfPalette = numberOfEntries*4;                        if (bitmapOffset == size) {                            switch (imageType) {                                case VERSION_3_1_BIT:                                    sizeOfPalette = (int)(colorsUsed == 0 ? 2 : colorsUsed) * 4;                                    break;                                case VERSION_3_4_BIT:                                    sizeOfPalette = (int)(colorsUsed == 0 ? 16 : colorsUsed) * 4;                                    break;                                case VERSION_3_8_BIT:                                    sizeOfPalette = (int)(colorsUsed == 0 ? 256 : colorsUsed) * 4;                                    break;                                default:                                    sizeOfPalette = 0;                                    break;                            }                            bitmapOffset = size + sizeOfPalette;                        }                        readPalette(sizeOfPalette);                                                                        properties.put("bmp_version", "BMP v. 3.x");                        break;                                            case BI_BITFIELDS:                                                if (bitsPerPixel == 16) {                            imageType = VERSION_3_NT_16_BIT;                        } else if (bitsPerPixel == 32) {                            imageType = VERSION_3_NT_32_BIT;                        }                                                // BitsField encoding                        redMask = (int)readDWord(inputStream);                        greenMask = (int)readDWord(inputStream);                        blueMask = (int)readDWord(inputStream);                                                properties.put("red_mask", new Integer(redMask));                        properties.put("green_mask", new Integer(greenMask));                        properties.put("blue_mask", new Integer(blueMask));                                                if (colorsUsed != 0) {                            // there is a palette                            sizeOfPalette = (int)colorsUsed*4;                            readPalette(sizeOfPalette);                        }                                                properties.put("bmp_version", "BMP v. 3.x NT");                        break;                                            default:                        throw new                        RuntimeException("Invalid compression specified in BMP file.");                }            } else if (size == 108) {                // Windows 4.x BMP                                properties.put("bmp_version", "BMP v. 4.x");                                // rgb masks, valid only if comp is BI_BITFIELDS                redMask = (int)readDWord(inputStream);                greenMask = (int)readDWord(inputStream);                blueMask = (int)readDWord(inputStream);                // Only supported for 32bpp BI_RGB argb                alphaMask = (int)readDWord(inputStream);                long csType = readDWord(inputStream);                int redX = readLong(inputStream);                int redY = readLong(inputStream);                int redZ = readLong(inputStream);                int greenX = readLong(inputStream);                int greenY = readLong(inputStream);                int greenZ = readLong(inputStream);                int blueX = readLong(inputStream);                int blueY = readLong(inputStream);                int blueZ = readLong(inputStream);                long gammaRed = readDWord(inputStream);                long gammaGreen = readDWord(inputStream);                long gammaBlue = readDWord(inputStream);                                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;                    }                }                                properties.put("red_mask", new Integer(redMask));                properties.put("green_mask", new Integer(greenMask));                properties.put("blue_mask", new Integer(blueMask));                properties.put("alpha_mask", new Integer(alphaMask));                // Read in the palette                int numberOfEntries = (int)((bitmapOffset-14-size) / 4);                int sizeOfPalette = numberOfEntries*4;                if (bitmapOffset == size) {                    switch (imageType) {                        case VERSION_4_1_BIT:                            sizeOfPalette = (int)(colorsUsed == 0 ? 2 : colorsUsed) * 4;                            break;                        case VERSION_4_4_BIT:                            sizeOfPalette = (int)(colorsUsed == 0 ? 16 : colorsUsed) * 4;                            break;                        case VERSION_4_8_BIT:                            sizeOfPalette = (int)(colorsUsed == 0 ? 256 : colorsUsed) * 4;                            break;                        default:                            sizeOfPalette = 0;                            break;                    }                    bitmapOffset = size + sizeOfPalette;                }                readPalette(sizeOfPalette);                                switch((int)csType) {                    case LCS_CALIBRATED_RGB:                        // All the new fields are valid only for this case                        properties.put("color_space", "LCS_CALIBRATED_RGB");                        properties.put("redX", new Integer(redX));                        properties.put("redY", new Integer(redY));                        properties.put("redZ", new Integer(redZ));                        properties.put("greenX", new Integer(greenX));                        properties.put("greenY", new Integer(greenY));                        properties.put("greenZ", new Integer(greenZ));                        properties.put("blueX", new Integer(blueX));                        properties.put("blueY", new Integer(blueY));                        properties.put("blueZ", new Integer(blueZ));                        properties.put("gamma_red", new Long(gammaRed));                        properties.put("gamma_green", new Long(gammaGreen));                        properties.put("gamma_blue", new Long(gammaBlue));                                                // break;                        throw new                        RuntimeException("Not implemented yet.");                                            case LCS_sRGB:                        // Default Windows color space                        properties.put("color_space", "LCS_sRGB");                        break;                                            case LCS_CMYK:                        properties.put("color_space", "LCS_CMYK");                        //		    break;                        throw new                        RuntimeException("Not implemented yet.");                }                            } else {                properties.put("bmp_version", "BMP v. 5.x");                throw new                RuntimeException("BMP version 5 not implemented yet.");            }        }                if (height > 0) {            // bottom up image            isBottomUp = true;        } else {            // top down image            isBottomUp = false;            height = Math.abs(height);        }        // When number of bitsPerPixel is <= 8, we use IndexColorModel.        if (bitsPerPixel == 1 || bitsPerPixel == 4 || bitsPerPixel == 8) {                        numBands = 1;                                    // Create IndexColorModel from the palette.            byte r[], g[], b[];            int sizep;            if (imageType == VERSION_2_1_BIT ||            imageType == VERSION_2_4_BIT ||            imageType == VERSION_2_8_BIT) {                                sizep = palette.length/3;                                if (sizep > 256) {                    sizep = 256;                }                                int off;                r = new byte[sizep];                g = new byte[sizep];                b = new byte[sizep];                for (int i=0; i<sizep; i++) {                    off = 3 * i;                    b[i] = palette[off];                    g[i] = palette[off+1];                    r[i] = palette[off+2];                }            } else {                sizep = palette.length/4;                                if (sizep > 256) {                    sizep = 256;                }                                int off;                r = new byte[sizep];                g = new byte[sizep];                b = new byte[sizep];                for (int i=0; i<sizep; i++) {                    off = 4 * i;                    b[i] = palette[off];                    g[i] = palette[off+1];                    r[i] = palette[off+2];                }            }                    } else if (bitsPerPixel == 16) {            numBands = 3;        } 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.        } else {            numBands = 3;        }    }        private byte[] getPalette(int group) {        if (palette == null)            return null;        byte np[] = new byte[palette.length / group * 3];        int e = palette.length / group;        for (int k = 0; k < e; ++k) {            int src = k * group;            int dest = k * 3;            np[dest + 2] = palette[src++];            np[dest + 1] = palette[src++];            np[dest] = palette[src];        }        return np;    }        private Image getImage() throws IOException, BadElementException {        byte bdata[] = null; // buffer for byte data                //	if (sampleModel.getDataType() == DataBuffer.TYPE_BYTE)

⌨️ 快捷键说明

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