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

📄 imageutil.java

📁 JAVA 所有包
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
                short[] data = dataBuffer instanceof DataBufferShort ?                    ((DataBufferShort)dataBuffer).getData() :                    ((DataBufferUShort)dataBuffer).getData();                for(int y = 0; y < rectHeight; y++) {                    int xRemaining = rectWidth;                    int i = eltOffset;                    while(xRemaining > 8) {                        short datum = data[i++];                        binaryDataArray[b++] = (byte)((datum >>> 8) & 0xFF);                        binaryDataArray[b++] = (byte)(datum & 0xFF);                        xRemaining -= 16;                    }                    if(xRemaining > 0) {                        binaryDataArray[b++] = (byte)((data[i] >>> 8) & 0XFF);                    }                    eltOffset += lineStride;                }            } else if(dataBuffer instanceof DataBufferInt) {                int[] data = ((DataBufferInt)dataBuffer).getData();                for(int y = 0; y < rectHeight; y++) {                    int xRemaining = rectWidth;                    int i = eltOffset;                    while(xRemaining > 24) {                        int datum = data[i++];                        binaryDataArray[b++] = (byte)((datum >>> 24) & 0xFF);                        binaryDataArray[b++] = (byte)((datum >>> 16) & 0xFF);                        binaryDataArray[b++] = (byte)((datum >>> 8) & 0xFF);                        binaryDataArray[b++] = (byte)(datum & 0xFF);                        xRemaining -= 32;                    }                    int shift = 24;                    while(xRemaining > 0) {                        binaryDataArray[b++] =                            (byte)((data[i] >>> shift) & 0xFF);                        shift -= 8;                        xRemaining -= 8;                    }                    eltOffset += lineStride;                }            }        } else { // bitOffset != 0            if(dataBuffer instanceof DataBufferByte) {                byte[] data = ((DataBufferByte)dataBuffer).getData();                if((bitOffset & 7) == 0) {                    int stride = numBytesPerRow;                    int offset = 0;                    for(int y = 0; y < rectHeight; y++) {                        System.arraycopy(data, eltOffset,                                         binaryDataArray, offset,                                         stride);                        offset += stride;                        eltOffset += lineStride;                    }                } else { // bitOffset % 8 != 0                    int leftShift = bitOffset & 7;                    int rightShift = 8 - leftShift;                    for(int y = 0; y < rectHeight; y++) {                        int i = eltOffset;                        int xRemaining = rectWidth;                        while(xRemaining > 0) {                            if(xRemaining > rightShift) {                                binaryDataArray[b++] =                                    (byte)(((data[i++]&0xFF) << leftShift) |                                           ((data[i]&0xFF) >>> rightShift));                            } else {                                binaryDataArray[b++] =                                    (byte)((data[i]&0xFF) << leftShift);                            }                            xRemaining -= 8;                        }                        eltOffset += lineStride;                    }                }            } else if(dataBuffer instanceof DataBufferShort ||                      dataBuffer instanceof DataBufferUShort) {                short[] data = dataBuffer instanceof DataBufferShort ?                    ((DataBufferShort)dataBuffer).getData() :                    ((DataBufferUShort)dataBuffer).getData();                for(int y = 0; y < rectHeight; y++) {                    int bOffset = bitOffset;                    for(int x = 0; x < rectWidth; x += 8, bOffset += 8) {                        int i = eltOffset + bOffset/16;                        int mod = bOffset % 16;                        int left = data[i] & 0xFFFF;                        if(mod <= 8) {                            binaryDataArray[b++] = (byte)(left >>> (8 - mod));                        } else {                            int delta = mod - 8;                            int right = data[i+1] & 0xFFFF;                            binaryDataArray[b++] =                                (byte)((left << delta) |                                       (right >>> (16 - delta)));                        }                    }                    eltOffset += lineStride;                }            } else if(dataBuffer instanceof DataBufferInt) {                int[] data = ((DataBufferInt)dataBuffer).getData();                for(int y = 0; y < rectHeight; y++) {                    int bOffset = bitOffset;                    for(int x = 0; x < rectWidth; x += 8, bOffset += 8) {                        int i = eltOffset + bOffset/32;                        int mod = bOffset % 32;                        int left = data[i];                        if(mod <= 24) {                            binaryDataArray[b++] =                                (byte)(left >>> (24 - mod));                        } else {                            int delta = mod - 24;                            int right = data[i+1];                            binaryDataArray[b++] =                                (byte)((left << delta) |                                       (right >>> (32 - delta)));                        }                    }                    eltOffset += lineStride;                }            }        }        return binaryDataArray;    }    /**     * Returns the binary data unpacked into an array of bytes.     * The line stride will be the width of the <code>Raster</code>.     *     * @throws IllegalArgumentException if <code>isBinary()</code> returns     * <code>false</code> with the <code>SampleModel</code> of the     * supplied <code>Raster</code> as argument.     */    public static byte[] getUnpackedBinaryData(Raster raster,                                               Rectangle rect) {        SampleModel sm = raster.getSampleModel();        if(!isBinary(sm)) {            throw new IllegalArgumentException(I18N.getString("ImageUtil0"));        }        int rectX = rect.x;        int rectY = rect.y;        int rectWidth = rect.width;        int rectHeight = rect.height;        DataBuffer dataBuffer = raster.getDataBuffer();        int dx = rectX - raster.getSampleModelTranslateX();        int dy = rectY - raster.getSampleModelTranslateY();        MultiPixelPackedSampleModel mpp = (MultiPixelPackedSampleModel)sm;        int lineStride = mpp.getScanlineStride();        int eltOffset = dataBuffer.getOffset() + mpp.getOffset(dx, dy);        int bitOffset = mpp.getBitOffset(dx);        byte[] bdata = new byte[rectWidth*rectHeight];        int maxY = rectY + rectHeight;        int maxX = rectX + rectWidth;        int k = 0;        if(dataBuffer instanceof DataBufferByte) {            byte[] data = ((DataBufferByte)dataBuffer).getData();            for(int y = rectY; y < maxY; y++) {                int bOffset = eltOffset*8 + bitOffset;                for(int x = rectX; x < maxX; x++) {                    byte b = data[bOffset/8];                    bdata[k++] =                        (byte)((b >>> (7 - bOffset & 7)) & 0x0000001);                    bOffset++;                }                eltOffset += lineStride;            }        } else if(dataBuffer instanceof DataBufferShort ||                  dataBuffer instanceof DataBufferUShort) {            short[] data = dataBuffer instanceof DataBufferShort ?                ((DataBufferShort)dataBuffer).getData() :                ((DataBufferUShort)dataBuffer).getData();            for(int y = rectY; y < maxY; y++) {                int bOffset = eltOffset*16 + bitOffset;                for(int x = rectX; x < maxX; x++) {                    short s = data[bOffset/16];                    bdata[k++] =                        (byte)((s >>> (15 - bOffset % 16)) &                               0x0000001);                    bOffset++;                }                eltOffset += lineStride;            }        } else if(dataBuffer instanceof DataBufferInt) {            int[] data = ((DataBufferInt)dataBuffer).getData();            for(int y = rectY; y < maxY; y++) {                int bOffset = eltOffset*32 + bitOffset;                for(int x = rectX; x < maxX; x++) {                    int i = data[bOffset/32];                    bdata[k++] =                        (byte)((i >>> (31 - bOffset % 32)) &                               0x0000001);                    bOffset++;                }                eltOffset += lineStride;            }        }        return bdata;    }    /**     * Sets the supplied <code>Raster</code>'s data from an array     * of packed binary data of the form returned by     * <code>getPackedBinaryData()</code>.     *     * @throws IllegalArgumentException if <code>isBinary()</code> returns     * <code>false</code> with the <code>SampleModel</code> of the     * supplied <code>Raster</code> as argument.     */    public static void setPackedBinaryData(byte[] binaryDataArray,                                           WritableRaster raster,                                           Rectangle rect) {        SampleModel sm = raster.getSampleModel();        if(!isBinary(sm)) {            throw new IllegalArgumentException(I18N.getString("ImageUtil0"));        }        int rectX = rect.x;        int rectY = rect.y;        int rectWidth = rect.width;        int rectHeight = rect.height;        DataBuffer dataBuffer = raster.getDataBuffer();        int dx = rectX - raster.getSampleModelTranslateX();        int dy = rectY - raster.getSampleModelTranslateY();        MultiPixelPackedSampleModel mpp = (MultiPixelPackedSampleModel)sm;        int lineStride = mpp.getScanlineStride();        int eltOffset = dataBuffer.getOffset() + mpp.getOffset(dx, dy);        int bitOffset = mpp.getBitOffset(dx);        int b = 0;        if(bitOffset == 0) {            if(dataBuffer instanceof DataBufferByte) {                byte[] data = ((DataBufferByte)dataBuffer).getData();                if(data == binaryDataArray) {                    // Optimal case: simply return.                    return;                }                int stride = (rectWidth + 7)/8;                int offset = 0;                for(int y = 0; y < rectHeight; y++) {                    System.arraycopy(binaryDataArray, offset,                                     data, eltOffset,                                     stride);                    offset += stride;                    eltOffset += lineStride;                }            } else if(dataBuffer instanceof DataBufferShort ||                      dataBuffer instanceof DataBufferUShort) {                short[] data = dataBuffer instanceof DataBufferShort ?                    ((DataBufferShort)dataBuffer).getData() :                    ((DataBufferUShort)dataBuffer).getData();                for(int y = 0; y < rectHeight; y++) {                    int xRemaining = rectWidth;                    int i = eltOffset;                    while(xRemaining > 8) {                        data[i++] =                            (short)(((binaryDataArray[b++] & 0xFF) << 8) |                                    (binaryDataArray[b++] & 0xFF));                        xRemaining -= 16;                    }                    if(xRemaining > 0) {                        data[i++] =                            (short)((binaryDataArray[b++] & 0xFF) << 8);                    }                    eltOffset += lineStride;                }            } else if(dataBuffer instanceof DataBufferInt) {                int[] data = ((DataBufferInt)dataBuffer).getData();                for(int y = 0; y < rectHeight; y++) {                    int xRemaining = rectWidth;                    int i = eltOffset;                    while(xRemaining > 24) {                        data[i++] =                            (int)(((binaryDataArray[b++] & 0xFF) << 24) |

⌨️ 快捷键说明

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