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

📄 pngreader.java

📁 实现JAVA界面的代码GWT
💻 JAVA
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi 
// Source File Name:   PNGReader.java

package jxl.biff.drawing;

import java.io.*;
import java.util.Arrays;

// Referenced classes of package jxl.biff.drawing:
//            Chunk, ChunkType

public class PNGReader
{

    private byte pngData[];
    private Chunk ihdr;
    private Chunk phys;
    private int pixelWidth;
    private int pixelHeight;
    private int verticalResolution;
    private int horizontalResolution;
    private int resolutionUnit;
    private static byte PNG_MAGIC_NUMBER[] = {
        -119, 80, 78, 71, 13, 10, 26, 10
    };

    public PNGReader(byte data[])
    {
        pngData = data;
    }

    void read()
    {
        byte header[] = new byte[PNG_MAGIC_NUMBER.length];
        System.arraycopy(pngData, 0, header, 0, header.length);
        boolean pngFile = Arrays.equals(PNG_MAGIC_NUMBER, header);
        if(!pngFile)
        {
            System.out.println("Not a png file");
            return;
        }
        int length;
        for(int pos = 8; pos < pngData.length; pos += length + 12)
        {
            length = getInt(pngData[pos], pngData[pos + 1], pngData[pos + 2], pngData[pos + 3]);
            ChunkType chunkType = ChunkType.getChunkType(pngData[pos + 4], pngData[pos + 5], pngData[pos + 6], pngData[pos + 7]);
            if(chunkType == ChunkType.IHDR)
            {
                ihdr = new Chunk(pos + 8, length, chunkType, pngData);
                continue;
            }
            if(chunkType == ChunkType.PHYS)
                phys = new Chunk(pos + 8, length, chunkType, pngData);
        }

        byte ihdrData[] = ihdr.getData();
        pixelWidth = getInt(ihdrData[0], ihdrData[1], ihdrData[2], ihdrData[3]);
        pixelHeight = getInt(ihdrData[4], ihdrData[5], ihdrData[6], ihdrData[7]);
        if(phys != null)
        {
            byte physData[] = phys.getData();
            resolutionUnit = physData[8];
            horizontalResolution = getInt(physData[0], physData[1], physData[2], physData[3]);
            verticalResolution = getInt(physData[4], physData[5], physData[6], physData[7]);
        }
    }

    private int getInt(byte d1, byte d2, byte d3, byte d4)
    {
        int i1 = d1 & 0xff;
        int i2 = d2 & 0xff;
        int i3 = d3 & 0xff;
        int i4 = d4 & 0xff;
        int val = i1 << 24 | i2 << 16 | i3 << 8 | i4;
        return val;
    }

    public int getHeight()
    {
        return pixelHeight;
    }

    public int getWidth()
    {
        return pixelWidth;
    }

    public int getHorizontalResolution()
    {
        return resolutionUnit != 1 ? 0 : horizontalResolution;
    }

    public int getVerticalResolution()
    {
        return resolutionUnit != 1 ? 0 : verticalResolution;
    }

    public static void main(String args[])
    {
        try
        {
            File f = new File(args[0]);
            int size = (int)f.length();
            System.out.println("File is " + args[0]);
            byte data[] = new byte[size];
            FileInputStream fis = new FileInputStream(f);
            fis.read(data);
            fis.close();
            PNGReader reader = new PNGReader(data);
            reader.read();
            System.out.println("Height in pixels:  " + reader.getHeight());
            System.out.println("Width in pixels:  " + reader.getWidth());
            System.out.println("Horizontal res:  " + reader.getHorizontalResolution());
            System.out.println("Vertical res:  " + reader.getVerticalResolution());
        }
        catch(Throwable t)
        {
            t.printStackTrace();
        }
    }

}

⌨️ 快捷键说明

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