亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? jpegencoder.java

?? JavaExplorer是一個獨立于平臺的瀏覽器
?? JAVA
?? 第 1 頁 / 共 4 頁
字號:
// Version 1.0a// Copyright (C) 1998, James R. Weeks and BioElectroMech.// Visit BioElectroMech at www.obrador.com.  Email James@obrador.com.// See license.txt for details about the allowed used of this software.// This software is based in part on the work of the Independent JPEG Group.// See IJGreadme.txt for details about the Independent JPEG Group's license.// This encoder is inspired by the Java Jpeg encoder by Florian Raemy,// studwww.eurecom.fr/~raemy.// It borrows a great deal of code and structure from the Independent// Jpeg Group's Jpeg 6a library, Copyright Thomas G. Lane.// See license.txt for details.package javaexplorer.io.encoder;import java.awt.*;import java.awt.image.*;import java.io.*;import java.util.*;/** JpegEncoder - The JPEG main program which performs a jpeg compression of* an image.*//** Writes images to stream in JPEG format. */public class JpegEncoder {    static int Quality;    static int defaultQuality = 75;    static {        setQuality(50);    }    public static int[] jpegNaturalOrder = {        0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33,        40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43,        36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53,        60, 61, 54, 47, 55, 62, 63,    };    Thread runner;    BufferedOutputStream outStream;    Image image;    JpegInfo JpegObj;    Huffman Huf;    DCT dct;    int imageHeight;    int imageWidth;    int code;    public JpegEncoder(Image image, int quality, OutputStream out) {        /*        * Quality of the image.        * 0 to 100 and from bad image quality, high compression to good        * image quality low compression        */        Quality = quality;        /*        * Getting picture information        * It takes the Width, Height and RGB scans of the image.        */        JpegObj = new JpegInfo(image);        imageHeight = JpegObj.imageHeight;        imageWidth = JpegObj.imageWidth;        outStream = new BufferedOutputStream(out);        dct = new DCT(Quality);        Huf = new Huffman(imageWidth, imageHeight);    }    /** Specifies the image quality (0-100). 0 is poorest image quality,            highest compression, and 100 is best image quality, lowest compression. */    public static void setQuality(int quality) {        if (quality < 0) {            quality = 0;        }        if (quality > 100) {            quality = 100;        }        Quality = quality;    }    public static int getQuality() {        return Quality;    }    public void Compress() {        WriteHeaders(outStream);        WriteCompressedData(outStream);        WriteEOI(outStream);        try {            outStream.flush();        } catch (IOException e) {            System.out.println("IO Error: " + e.getMessage());        }    }    public void WriteCompressedData(BufferedOutputStream outStream) {        int offset;        int i;        int j;        int r;        int c;        int a;        int b;        int temp = 0;        int comp;        int xpos;        int ypos;        int xblockoffset;        int yblockoffset;        float[][] inputArray;        float[][] dctArray1 = new float[8][8];        double[][] dctArray2 = new double[8][8];        int[] dctArray3 = new int[8 * 8];        /*         * This method controls the compression of the image.         * Starting at the upper left of the image, it compresses 8x8 blocks         * of data until the entire image has been compressed.         */        int[] lastDCvalue = new int[JpegObj.NumberOfComponents];        int[] zeroArray = new int[64]; // initialized to hold all zeros        int Width = 0;        int Height = 0;        int nothing = 0;        int not;        int MinBlockWidth;        int MinBlockHeight;        // This initial setting of MinBlockWidth and MinBlockHeight is done to        // ensure they start with values larger than will actually be the case.        MinBlockWidth = (((imageWidth % 8) != 0)            ? ((int) (Math.floor((double) imageWidth / 8.0) + 1) * 8) : imageWidth);        MinBlockHeight = (((imageHeight % 8) != 0)            ? ((int) (Math.floor((double) imageHeight / 8.0) + 1) * 8)            : imageHeight);        for (comp = 0; comp < JpegObj.NumberOfComponents; comp++) {            MinBlockWidth = Math.min(MinBlockWidth, JpegObj.BlockWidth[comp]);            MinBlockHeight = Math.min(MinBlockHeight, JpegObj.BlockHeight[comp]);        }        xpos = 0;        for (r = 0; r < MinBlockHeight; r++) {            for (c = 0; c < MinBlockWidth; c++) {                xpos = c * 8;                ypos = r * 8;                for (comp = 0; comp < JpegObj.NumberOfComponents; comp++) {                    Width = JpegObj.BlockWidth[comp];                    Height = JpegObj.BlockHeight[comp];                    inputArray = (float[][]) JpegObj.Components[comp];                    for (i = 0; i < JpegObj.VsampFactor[comp]; i++) {                        for (j = 0; j < JpegObj.HsampFactor[comp]; j++) {                            xblockoffset = j * 8;                            yblockoffset = i * 8;                            for (a = 0; a < 8; a++) {                                for (b = 0; b < 8; b++) {                                    // I believe this is where the dirty line at the bottom of the image is                                    // coming from.  I need to do a check here to make sure I'm not reading past                                    // image data.                                    // This seems to not be a big issue right now. (04/04/98)                                    dctArray1[a][b] = inputArray[ypos +                                        yblockoffset + a][xpos + xblockoffset +                                        b];                                }                            }                            // The following code commented out because on some images this technique                            // results in poor right and bottom borders.                            //                        if ((!JpegObj.lastColumnIsDummy[comp] || c < Width - 1) && (!JpegObj.lastRowIsDummy[comp] || r < Height - 1)) {                            dctArray2 = dct.forwardDCT(dctArray1);                            dctArray3 = dct.quantizeBlock(dctArray2,                                    JpegObj.QtableNumber[comp]);                            //                        }                            //                        else {                            //                           zeroArray[0] = dctArray3[0];                            //                           zeroArray[0] = lastDCvalue[comp];                            //                           dctArray3 = zeroArray;                            //                        }                            Huf.HuffmanBlockEncoder(outStream, dctArray3,                                lastDCvalue[comp], JpegObj.DCtableNumber[comp],                                JpegObj.ACtableNumber[comp]);                            lastDCvalue[comp] = dctArray3[0];                        }                    }                }            }        }    }    public void WriteEOI(BufferedOutputStream out) {        byte[] EOI = { (byte) 0xFF, (byte) 0xD9 };        WriteMarker(EOI, out);    }    public void WriteHeaders(BufferedOutputStream out) {        int i;        int j;        int index;        int offset;        int length;        int[] tempArray;        // the SOI marker        byte[] SOI = { (byte) 0xFF, (byte) 0xD8 };        WriteMarker(SOI, out);        // The order of the following headers is quiet inconsequential.        // the JFIF header        byte[] JFIF = new byte[18];        JFIF[0] = (byte) 0xff;        JFIF[1] = (byte) 0xe0;        JFIF[2] = (byte) 0x00;        JFIF[3] = (byte) 0x10;        JFIF[4] = (byte) 0x4a;        JFIF[5] = (byte) 0x46;        JFIF[6] = (byte) 0x49;        JFIF[7] = (byte) 0x46;        JFIF[8] = (byte) 0x00;        JFIF[9] = (byte) 0x01;        JFIF[10] = (byte) 0x00;        JFIF[11] = (byte) 0x00;        JFIF[12] = (byte) 0x00;        JFIF[13] = (byte) 0x01;        JFIF[14] = (byte) 0x00;        JFIF[15] = (byte) 0x01;        JFIF[16] = (byte) 0x00;        JFIF[17] = (byte) 0x00;        WriteArray(JFIF, out);        // Comment Header        String comment = new String();        comment = JpegObj.getComment();        length = comment.length();        byte[] COM = new byte[length + 4];        COM[0] = (byte) 0xFF;        COM[1] = (byte) 0xFE;        COM[2] = (byte) ((length >> 8) & 0xFF);        COM[3] = (byte) (length & 0xFF);        java.lang.System.arraycopy(JpegObj.Comment.getBytes(), 0, COM, 4,            JpegObj.Comment.length());        WriteArray(COM, out);        // The DQT header        // 0 is the luminance index and 1 is the chrominance index        byte[] DQT = new byte[134];        DQT[0] = (byte) 0xFF;        DQT[1] = (byte) 0xDB;        DQT[2] = (byte) 0x00;        DQT[3] = (byte) 0x84;        offset = 4;        for (i = 0; i < 2; i++) {            DQT[offset++] = (byte) ((0 << 4) + i);            tempArray = (int[]) dct.quantum[i];            for (j = 0; j < 64; j++) {                DQT[offset++] = (byte) tempArray[jpegNaturalOrder[j]];            }        }        WriteArray(DQT, out);        // Start of Frame Header        byte[] SOF = new byte[19];        SOF[0] = (byte) 0xFF;        SOF[1] = (byte) 0xC0;        SOF[2] = (byte) 0x00;        SOF[3] = (byte) 17;        SOF[4] = (byte) JpegObj.Precision;        SOF[5] = (byte) ((JpegObj.imageHeight >> 8) & 0xFF);        SOF[6] = (byte) ((JpegObj.imageHeight) & 0xFF);        SOF[7] = (byte) ((JpegObj.imageWidth >> 8) & 0xFF);        SOF[8] = (byte) ((JpegObj.imageWidth) & 0xFF);        SOF[9] = (byte) JpegObj.NumberOfComponents;        index = 10;        for (i = 0; i < SOF[9]; i++) {            SOF[index++] = (byte) JpegObj.CompID[i];            SOF[index++] = (byte) ((JpegObj.HsampFactor[i] << 4) +                JpegObj.VsampFactor[i]);            SOF[index++] = (byte) JpegObj.QtableNumber[i];        }        WriteArray(SOF, out);        // The DHT Header        byte[] DHT1;        // The DHT Header        byte[] DHT2;        // The DHT Header        byte[] DHT3;        // The DHT Header        byte[] DHT4;        int bytes;        int temp;        int oldindex;        int intermediateindex;        length = 2;        index = 4;        oldindex = 4;        DHT1 = new byte[17];        DHT4 = new byte[4];        DHT4[0] = (byte) 0xFF;        DHT4[1] = (byte) 0xC4;        for (i = 0; i < 4; i++) {            bytes = 0;            DHT1[index++ - oldindex] = (byte) ((int[]) Huf.bits.elementAt(i))[0];            for (j = 1; j < 17; j++) {                temp = ((int[]) Huf.bits.elementAt(i))[j];                DHT1[index++ - oldindex] = (byte) temp;                bytes += temp;            }            intermediateindex = index;            DHT2 = new byte[bytes];            for (j = 0; j < bytes; j++) {                DHT2[index++ - intermediateindex] = (byte) ((int[]) Huf.val.elementAt(i))[j];            }            DHT3 = new byte[index];            java.lang.System.arraycopy(DHT4, 0, DHT3, 0, oldindex);            java.lang.System.arraycopy(DHT1, 0, DHT3, oldindex, 17);            java.lang.System.arraycopy(DHT2, 0, DHT3, oldindex + 17, bytes);            DHT4 = DHT3;            oldindex = index;        }        DHT4[2] = (byte) (((index - 2) >> 8) & 0xFF);        DHT4[3] = (byte) ((index - 2) & 0xFF);        WriteArray(DHT4, out);        // Start of Scan Header        byte[] SOS = new byte[14];        SOS[0] = (byte) 0xFF;        SOS[1] = (byte) 0xDA;        SOS[2] = (byte) 0x00;        SOS[3] = (byte) 12;        SOS[4] = (byte) JpegObj.NumberOfComponents;        index = 5;        for (i = 0; i < SOS[4]; i++) {            SOS[index++] = (byte) JpegObj.CompID[i];            SOS[index++] = (byte) ((JpegObj.DCtableNumber[i] << 4) +                JpegObj.ACtableNumber[i]);        }        SOS[index++] = (byte) JpegObj.Ss;        SOS[index++] = (byte) JpegObj.Se;        SOS[index++] = (byte) ((JpegObj.Ah << 4) + JpegObj.Al);        WriteArray(SOS, out);    }    void WriteMarker(byte[] data, BufferedOutputStream out) {        try {            out.write(data, 0, 2);        } catch (IOException e) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99国产精品免费| 美女诱惑一区二区| 精品少妇一区二区三区免费观看| 成人国产亚洲欧美成人综合网| 三级不卡在线观看| 中文字幕在线一区免费| 久久久久久久久97黄色工厂| 99久久久久久| 国产一区二区三区在线观看免费视频 | 成人综合婷婷国产精品久久蜜臀| 亚洲一区二区三区四区在线观看 | 久久电影网电视剧免费观看| 亚洲欧美一区二区三区国产精品| 久久久久久日产精品| 欧美精品精品一区| 色综合天天综合狠狠| 国产福利91精品一区二区三区| 免费在线看成人av| 亚洲成人在线观看视频| 综合自拍亚洲综合图不卡区| 国产午夜精品一区二区三区嫩草 | 国产精品久久久久久久久久久免费看| 91精品国产综合久久久久久漫画 | 日韩一级高清毛片| 欧美日韩黄色一区二区| 色婷婷综合激情| bt7086福利一区国产| 高清成人免费视频| 国产美女在线观看一区| 午夜精品久久久久久久99樱桃 | 亚洲欧洲日韩在线| 中文字幕乱码日本亚洲一区二区| 久久色成人在线| 精品国产sm最大网站| 日韩欧美成人一区| 日韩视频免费观看高清完整版| 3d动漫精品啪啪| 在线不卡中文字幕| 精品视频在线看| 欧美精品v日韩精品v韩国精品v| 欧美日韩免费一区二区三区 | 亚洲视频一二区| 日韩伦理免费电影| 樱花影视一区二区| 一区二区三区欧美视频| 亚洲一区二区三区在线看| 亚洲午夜在线电影| 日韩av午夜在线观看| 日韩影院免费视频| 久久精品国产秦先生| 精品一区二区在线视频| 国产精品一区二区你懂的| 福利一区二区在线| 91美女片黄在线观看91美女| 欧美图区在线视频| 日韩一级二级三级精品视频| 久久蜜桃香蕉精品一区二区三区| 中文字幕不卡在线观看| 国产精品不卡在线| 亚洲一级片在线观看| 美女网站视频久久| 福利一区福利二区| 欧美日韩在线播| 日韩欧美二区三区| 国产精品大尺度| 日韩在线一二三区| 国产成人免费在线观看不卡| 一本到不卡精品视频在线观看| 欧美日韩国产首页| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品丝袜91| 亚洲一区二区三区在线| 久久国产综合精品| 色综合欧美在线| 日韩视频免费观看高清完整版在线观看| 久久众筹精品私拍模特| 亚洲私人影院在线观看| 日韩中文字幕区一区有砖一区| 国产黄人亚洲片| 欧美色爱综合网| 久久久亚洲高清| 亚洲成在人线免费| 成人国产精品免费观看视频| 欧美私人免费视频| 久久久不卡网国产精品二区| 亚洲午夜久久久久久久久电影院| 久久66热re国产| 一本大道久久a久久综合| 欧美本精品男人aⅴ天堂| 悠悠色在线精品| 国产91清纯白嫩初高中在线观看| 91福利在线观看| 国产色一区二区| 日韩av中文字幕一区二区三区| www.在线欧美| 精品国产99国产精品| 亚洲va国产天堂va久久en| 成人黄色小视频| 欧美mv和日韩mv国产网站| 一区二区在线观看视频在线观看| 国产精品系列在线观看| 51精品久久久久久久蜜臀| 中文字幕中文乱码欧美一区二区| 精彩视频一区二区| 欧美日韩mp4| 亚洲综合免费观看高清完整版在线| 国产精品一二三四| 日韩一区二区三区在线| 亚洲成人自拍偷拍| 色哟哟精品一区| 亚洲国产成人私人影院tom| 久久69国产一区二区蜜臀| 欧美日韩国产一级二级| 一区二区三区加勒比av| av电影在线观看不卡| 久久久噜噜噜久久人人看| 免费成人在线视频观看| 欧美日本一道本| 亚洲夂夂婷婷色拍ww47| 99精品视频一区| 国产精品成人一区二区艾草| 国产福利一区二区| 久久久久久久久久看片| 韩国一区二区在线观看| 欧美xxxxxxxx| 美女国产一区二区| 在线播放91灌醉迷j高跟美女 | 精品日韩一区二区三区 | 久久国产三级精品| 欧美一区二区免费视频| 视频一区二区不卡| 日韩欧美国产一区在线观看| 日韩电影在线看| 日韩美女天天操| 紧缚奴在线一区二区三区| 日韩一区二区视频在线观看| 青草国产精品久久久久久| 在线不卡欧美精品一区二区三区| 香蕉成人伊视频在线观看| 欧美日韩久久一区二区| 亚洲第一狼人社区| 欧美日韩国产小视频在线观看| 天天亚洲美女在线视频| 欧美日韩国产天堂| 日韩黄色一级片| 91精品国产欧美日韩| 蜜臀国产一区二区三区在线播放| 欧美电视剧在线观看完整版| 精品写真视频在线观看| 国产欧美一区二区三区在线老狼| 丁香激情综合五月| 1区2区3区欧美| 欧美在线观看视频一区二区三区| 亚洲五码中文字幕| 日韩一区二区三区在线视频| 九色porny丨国产精品| 欧美韩国一区二区| 一本久久a久久免费精品不卡| 亚洲成人免费在线观看| 日韩视频免费直播| 国产69精品久久久久777| 亚洲你懂的在线视频| 欧美日本精品一区二区三区| 国精产品一区一区三区mba视频| 国产日韩欧美精品在线| 色综合一区二区| 日韩和欧美一区二区三区| 久久久亚洲高清| 欧美亚州韩日在线看免费版国语版| 日韩精品久久理论片| 久久嫩草精品久久久精品 | 精品国产91九色蝌蚪| 国产91富婆露脸刺激对白| 亚洲影院在线观看| 日韩精品在线一区| 99久久婷婷国产精品综合| 天使萌一区二区三区免费观看| 久久精品男人的天堂| 91福利精品第一导航| 久久成人久久鬼色| 亚洲精品一二三| 久久精品无码一区二区三区| 色狠狠一区二区三区香蕉| 九九热在线视频观看这里只有精品| 亚洲欧美另类在线| 精品久久久久99| 日本久久一区二区三区| 国产在线国偷精品产拍免费yy| 亚洲午夜久久久久久久久电影网| 久久久久国产精品麻豆ai换脸 | 日本亚洲免费观看| 亚洲天堂中文字幕| 日韩免费一区二区三区在线播放| 一本久久a久久免费精品不卡| 国产精品一区二区免费不卡 | 97国产一区二区| 国产又黄又大久久| 日韩电影免费在线观看网站| 国产精品久久久久久久蜜臀| 精品国产乱码久久久久久影片|