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

📄 bmpimage.java

📁 源码包含生成 PDF 和 HTML 的类库
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
/* * Copyright 2003-2008 by Paulo Soares. * * The contents of this file are subject to the Mozilla Public License Version 1.1 * (the "License"); you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the License. * * The Original Code is 'iText, a free JAVA-PDF library'. * * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by * the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie. * All Rights Reserved. * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer * are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved. * * Contributor(s): all the names of the contributors are added in the source code * where applicable. * * Alternatively, the contents of this file may be used under the terms of the * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the * provisions of LGPL are applicable instead of those above.  If you wish to * allow use of your version of this file only under the terms of the LGPL * License and not to allow others to use your version of this file under * the MPL, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the LGPL. * If you do not delete the provisions above, a recipient may use your version * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE. * * This library is free software; you can redistribute it and/or modify it * under the terms of the MPL as stated above or under the terms of the GNU * Library General Public License as published by the Free Software Foundation; * either version 2 of the License, or any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more * details. * * If you didn't download this code from the following link, you should check if * you aren't using an obsolete version: * http://www.lowagie.com/iText/ *  * This code was originally released in 2001 by SUN (see class * com.sun.media.imageioimpl.plugins.bmp.BMPImageReader.java) * using the BSD license in a specific wording. In a mail dating from * January 23, 2008, Brian Burkhalter (@sun.com) gave us permission * to use the code under the following version of the BSD license: * * Copyright (c) 2005 Sun Microsystems, Inc. All  Rights Reserved. *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met:  *  * - Redistribution of source code must retain the above copyright  *   notice, this  list of conditions and the following disclaimer. *  * - Redistribution in binary form must reproduce the above copyright *   notice, this list of conditions and the following disclaimer in  *   the documentation and/or other materials provided with the *   distribution. *  * Neither the name of Sun Microsystems, Inc. or the names of  * contributors may be used to endorse or promote products derived  * from this software without specific prior written permission. *  * This software is provided "AS IS," without a warranty of any  * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND  * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY * EXCLUDED. SUN MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL  * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF  * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR  * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES.  *  * You acknowledge that this software is not designed or intended for  * use in the design, construction, operation or maintenance of any  * nuclear facility. */package com.lowagie.text.pdf.codec;import java.io.BufferedInputStream;import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import java.net.URL;import java.util.HashMap;import com.lowagie.text.BadElementException;import com.lowagie.text.ExceptionConverter;import com.lowagie.text.Image;import com.lowagie.text.ImgRaw;import com.lowagie.text.Utilities;import com.lowagie.text.pdf.PdfArray;import com.lowagie.text.pdf.PdfDictionary;import com.lowagie.text.pdf.PdfName;import com.lowagie.text.pdf.PdfNumber;import com.lowagie.text.pdf.PdfString;/** Reads a BMP image. All types of BMP can be read. * <p> * It is based in the JAI codec. * * @author  Paulo Soares (psoares@consiste.pt) */public class BmpImage {        // BMP variables    private InputStream inputStream;    private long bitmapFileSize;    private long bitmapOffset;    private long compression;    private long imageSize;    private byte palette[];    private int imageType;    private int numBands;    private boolean isBottomUp;    private int bitsPerPixel;    private int redMask, greenMask, blueMask, alphaMask;    public HashMap properties = new HashMap();        private long xPelsPerMeter;    private long yPelsPerMeter;    // BMP Image types    private static final int VERSION_2_1_BIT = 0;    private static final int VERSION_2_4_BIT = 1;    private static final int VERSION_2_8_BIT = 2;    private static final int VERSION_2_24_BIT = 3;        private static final int VERSION_3_1_BIT = 4;    private static final int VERSION_3_4_BIT = 5;    private static final int VERSION_3_8_BIT = 6;    private static final int VERSION_3_24_BIT = 7;        private static final int VERSION_3_NT_16_BIT = 8;    private static final int VERSION_3_NT_32_BIT = 9;        private static final int VERSION_4_1_BIT = 10;    private static final int VERSION_4_4_BIT = 11;    private static final int VERSION_4_8_BIT = 12;    private static final int VERSION_4_16_BIT = 13;    private static final int VERSION_4_24_BIT = 14;    private static final int VERSION_4_32_BIT = 15;        // Color space types    private static final int LCS_CALIBRATED_RGB = 0;    private static final int LCS_sRGB = 1;    private static final int LCS_CMYK = 2;        // Compression Types    private static final int BI_RGB = 0;    private static final int BI_RLE8 = 1;    private static final int BI_RLE4 = 2;    private static final int BI_BITFIELDS = 3;        int width;    int height;        BmpImage(InputStream is, boolean noHeader, int size) throws IOException {        bitmapFileSize = size;        bitmapOffset = 0;        process(is, noHeader);    }        /** Reads a BMP from an url.     * @param url the url     * @throws IOException on error     * @return the image     */        public static Image getImage(URL url) throws IOException {        InputStream is = null;        try {            is = url.openStream();            Image img = getImage(is);            img.setUrl(url);            return img;        }        finally {            if (is != null) {                is.close();            }        }    }        /** Reads a BMP from a stream. The stream is not closed.     * @param is the stream     * @throws IOException on error     * @return the image     */        public static Image getImage(InputStream is) throws IOException {        return getImage(is, false, 0);    }        /** Reads a BMP from a stream. The stream is not closed.     * The BMP may not have a header and be considered as a plain DIB.     * @param is the stream     * @param noHeader true to process a plain DIB     * @param size the size of the DIB. Not used for a BMP     * @throws IOException on error     * @return the image     */        public static Image getImage(InputStream is, boolean noHeader, int size) throws IOException {        BmpImage bmp = new BmpImage(is, noHeader, size);        try {            Image img = bmp.getImage();            img.setDpi((int)(bmp.xPelsPerMeter * 0.0254d + 0.5d), (int)(bmp.yPelsPerMeter * 0.0254d + 0.5d));            img.setOriginalType(Image.ORIGINAL_BMP);            return img;        }        catch (BadElementException be) {            throw new ExceptionConverter(be);        }    }        /** Reads a BMP from a file.     * @param file the file     * @throws IOException on error     * @return the image     */        public static Image getImage(String file) throws IOException {        return getImage(Utilities.toURL(file));    }        /** Reads a BMP from a byte array.     * @param data the byte array     * @throws IOException on error     * @return the image     */        public static Image getImage(byte data[]) throws IOException {        ByteArrayInputStream is = new ByteArrayInputStream(data);        Image img = getImage(is);        img.setOriginalData(data);        return img;    }        protected void process(InputStream stream, boolean noHeader) throws IOException {        if (noHeader || stream instanceof BufferedInputStream) {            inputStream = stream;        } else {            inputStream = new BufferedInputStream(stream);        }        if (!noHeader) {            // Start File Header            if (!(readUnsignedByte(inputStream) == 'B' &&            readUnsignedByte(inputStream) == 'M')) {                throw new                RuntimeException("Invalid magic value for BMP file.");            }            // Read file size            bitmapFileSize = readDWord(inputStream);            // Read the two reserved fields            readWord(inputStream);            readWord(inputStream);            // Offset to the bitmap from the beginning            bitmapOffset = readDWord(inputStream);            // End File Header        }        // Start BitmapCoreHeader        long size = readDWord(inputStream);                if (size == 12) {            width = readWord(inputStream);            height = readWord(inputStream);        } else {            width = readLong(inputStream);            height = readLong(inputStream);        }                int planes = readWord(inputStream);        bitsPerPixel = readWord(inputStream);                properties.put("color_planes", new Integer(planes));        properties.put("bits_per_pixel", new Integer(bitsPerPixel));                // As BMP always has 3 rgb bands, except for Version 5,        // which is bgra        numBands = 3;        if (bitmapOffset == 0)            bitmapOffset = size;        if (size == 12) {            // Windows 2.x and OS/2 1.x            properties.put("bmp_version", "BMP v. 2.x");                        // Classify the image type            if (bitsPerPixel == 1) {                imageType = VERSION_2_1_BIT;            } else if (bitsPerPixel == 4) {                imageType = VERSION_2_4_BIT;            } else if (bitsPerPixel == 8) {                imageType = VERSION_2_8_BIT;            } else if (bitsPerPixel == 24) {                imageType = VERSION_2_24_BIT;            }                        // Read in the palette            int numberOfEntries = (int)((bitmapOffset-14-size) / 3);            int sizeOfPalette = numberOfEntries*3;            if (bitmapOffset == size) {                switch (imageType) {                    case VERSION_2_1_BIT:                        sizeOfPalette = 2 * 3;                        break;                    case VERSION_2_4_BIT:                        sizeOfPalette = 16 * 3;                        break;                    case VERSION_2_8_BIT:                        sizeOfPalette = 256 * 3;                        break;                    case VERSION_2_24_BIT:                        sizeOfPalette = 0;                        break;                }                bitmapOffset = size + sizeOfPalette;

⌨️ 快捷键说明

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