Example usage for java.awt.image DataBuffer TYPE_SHORT

List of usage examples for java.awt.image DataBuffer TYPE_SHORT

Introduction

In this page you can find the example usage for java.awt.image DataBuffer TYPE_SHORT.

Prototype

int TYPE_SHORT

To view the source code for java.awt.image DataBuffer TYPE_SHORT.

Click Source Link

Document

Tag for signed short data.

Usage

From source file:com.bc.ceres.jai.opimage.ReinterpretOpImage.java

private void rescale(Raster sourceRaster, WritableRaster targetRaster, Rectangle targetRectangle) {
    final int sourceDataType = sourceRaster.getSampleModel().getDataType();
    final int targetDataType = targetRaster.getSampleModel().getDataType();
    final PixelAccessor sourceAcc = new PixelAccessor(getSourceImage(0));
    final PixelAccessor targetAcc = new PixelAccessor(this);
    final UnpackedImageData sourcePixels;
    final UnpackedImageData targetPixels;

    sourcePixels = sourceAcc.getPixels(sourceRaster, targetRectangle, sourceDataType, false);
    targetPixels = targetAcc.getPixels(targetRaster, targetRectangle, targetDataType, true);

    switch (sourceDataType) {
    case DataBuffer.TYPE_BYTE:
        if (interpretationType == ReinterpretDescriptor.INTERPRET_BYTE_SIGNED) {
            rescaleSByte(sourcePixels, targetPixels, targetRectangle);
        } else {//from w  w  w . j  a v a  2s  .  com
            rescaleByte(sourcePixels, targetPixels, targetRectangle);
        }
        break;
    case DataBuffer.TYPE_USHORT:
        rescaleUShort(sourcePixels, targetPixels, targetRectangle);
        break;
    case DataBuffer.TYPE_SHORT:
        rescaleShort(sourcePixels, targetPixels, targetRectangle);
        break;
    case DataBuffer.TYPE_INT:
        if (interpretationType == ReinterpretDescriptor.INTERPRET_INT_UNSIGNED) {
            rescaleUInt(sourcePixels, targetPixels, targetRectangle);
        } else {
            rescaleInt(sourcePixels, targetPixels, targetRectangle);
        }
        break;
    case DataBuffer.TYPE_FLOAT:
        rescaleFloat(sourcePixels, targetPixels, targetRectangle);
        break;
    case DataBuffer.TYPE_DOUBLE:
        rescaleDouble(sourcePixels, targetPixels, targetRectangle);
        break;
    }

    targetAcc.setPixels(targetPixels);
}

From source file:GraphicsUtil.java

/**
 * Creates a new raster that has a <b>copy</b> of the data in
 * <tt>ras</tt>.  This is highly optimized for speed.  There is
 * no provision for changing any aspect of the SampleModel.
 * However you can specify a new location for the returned raster.
 *
 * This method should be used when you need to change the contents
 * of a Raster that you do not "own" (ie the result of a
 * <tt>getData</tt> call).//from  w w w  .  j a va  2  s.co  m
 *
 * @param ras The Raster to copy.
 *
 * @param minX The x location for the upper left corner of the
 *             returned WritableRaster.
 *
 * @param minY The y location for the upper left corner of the
 *             returned WritableRaster.
 *
 * @return    A writable copy of <tt>ras</tt>
 */
public static WritableRaster copyRaster(Raster ras, int minX, int minY) {
    WritableRaster ret = Raster.createWritableRaster(ras.getSampleModel(), new Point(0, 0));
    ret = ret.createWritableChild(ras.getMinX() - ras.getSampleModelTranslateX(),
            ras.getMinY() - ras.getSampleModelTranslateY(), ras.getWidth(), ras.getHeight(), minX, minY, null);

    // Use System.arraycopy to copy the data between the two...
    DataBuffer srcDB = ras.getDataBuffer();
    DataBuffer retDB = ret.getDataBuffer();
    if (srcDB.getDataType() != retDB.getDataType()) {
        throw new IllegalArgumentException("New DataBuffer doesn't match original");
    }
    int len = srcDB.getSize();
    int banks = srcDB.getNumBanks();
    int[] offsets = srcDB.getOffsets();
    for (int b = 0; b < banks; b++) {
        switch (srcDB.getDataType()) {
        case DataBuffer.TYPE_BYTE: {
            DataBufferByte srcDBT = (DataBufferByte) srcDB;
            DataBufferByte retDBT = (DataBufferByte) retDB;
            System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len);
            break;
        }
        case DataBuffer.TYPE_INT: {
            DataBufferInt srcDBT = (DataBufferInt) srcDB;
            DataBufferInt retDBT = (DataBufferInt) retDB;
            System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len);
            break;
        }
        case DataBuffer.TYPE_SHORT: {
            DataBufferShort srcDBT = (DataBufferShort) srcDB;
            DataBufferShort retDBT = (DataBufferShort) retDB;
            System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len);
            break;
        }
        case DataBuffer.TYPE_USHORT: {
            DataBufferUShort srcDBT = (DataBufferUShort) srcDB;
            DataBufferUShort retDBT = (DataBufferUShort) retDB;
            System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len);
            break;
        }
        }
    }

    return ret;
}

From source file:GraphicsUtil.java

/**
 * Creates a new raster that has a <b>copy</b> of the data in
 * <tt>ras</tt>.  This is highly optimized for speed.  There is
 * no provision for changing any aspect of the SampleModel.
 * However you can specify a new location for the returned raster.
 *
 * This method should be used when you need to change the contents
 * of a Raster that you do not "own" (ie the result of a
 * <tt>getData</tt> call)./*ww  w .j ava2  s.c  o  m*/
 *
 * @param ras The Raster to copy.
 *
 * @param minX The x location for the upper left corner of the
 *             returned WritableRaster.
 *
 * @param minY The y location for the upper left corner of the
 *             returned WritableRaster.
 *
 * @return    A writable copy of <tt>ras</tt>
 */
public static WritableRaster copyRaster(Raster ras, int minX, int minY) {
    WritableRaster ret = Raster.createWritableRaster(ras.getSampleModel(), new Point(0, 0));
    ret = ret.createWritableChild(ras.getMinX() - ras.getSampleModelTranslateX(),
            ras.getMinY() - ras.getSampleModelTranslateY(), ras.getWidth(), ras.getHeight(), minX, minY, null);

    // Use System.arraycopy to copy the data between the two...
    DataBuffer srcDB = ras.getDataBuffer();
    DataBuffer retDB = ret.getDataBuffer();
    if (srcDB.getDataType() != retDB.getDataType()) {
        throw new IllegalArgumentException("New DataBuffer doesn't match original");
    }
    int len = srcDB.getSize();
    int banks = srcDB.getNumBanks();
    int[] offsets = srcDB.getOffsets();
    for (int b = 0; b < banks; b++) {
        switch (srcDB.getDataType()) {
        case DataBuffer.TYPE_BYTE: {
            DataBufferByte srcDBT = (DataBufferByte) srcDB;
            DataBufferByte retDBT = (DataBufferByte) retDB;
            System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len);
        }
        case DataBuffer.TYPE_INT: {
            DataBufferInt srcDBT = (DataBufferInt) srcDB;
            DataBufferInt retDBT = (DataBufferInt) retDB;
            System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len);
        }
        case DataBuffer.TYPE_SHORT: {
            DataBufferShort srcDBT = (DataBufferShort) srcDB;
            DataBufferShort retDBT = (DataBufferShort) retDB;
            System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len);
        }
        case DataBuffer.TYPE_USHORT: {
            DataBufferUShort srcDBT = (DataBufferUShort) srcDB;
            DataBufferUShort retDBT = (DataBufferUShort) retDB;
            System.arraycopy(srcDBT.getData(b), offsets[b], retDBT.getData(b), offsets[b], len);
        }
        }
    }

    return ret;
}

From source file:it.geosolutions.imageio.plugins.nitronitf.ImageIOUtils.java

/**
 * Returns a generic pixel interleaved WritableRaster
 * //from  w  ww  .jav a  2 s .co m
 * @param numElems
 * @param numLines
 * @param bandOffsets
 * @param dataType
 * @return
 */
public static WritableRaster makeGenericPixelInterleavedWritableRaster(int numElems, int numLines, int numBands,
        int dataType) {
    int[] bandOffsets = new int[numBands];
    for (int i = 0; i < numBands; ++i)
        bandOffsets[i] = i;

    DataBuffer d = null;
    if (dataType == DataBuffer.TYPE_BYTE)
        d = new DataBufferByte(numElems * numLines * numBands);
    else if (dataType == DataBuffer.TYPE_SHORT)
        d = new DataBufferShort(numElems * numLines * numBands);
    else if (dataType == DataBuffer.TYPE_USHORT)
        d = new DataBufferUShort(numElems * numLines * numBands);
    else if (dataType == DataBuffer.TYPE_FLOAT)
        d = new DataBufferFloat(numElems * numLines * numBands);
    else if (dataType == DataBuffer.TYPE_DOUBLE)
        d = new DataBufferDouble(numElems * numLines * numBands);
    else
        throw new IllegalArgumentException("Invalid datatype: " + dataType);

    PixelInterleavedSampleModel pism = new PixelInterleavedSampleModel(dataType, numElems, numLines,
            bandOffsets.length, numElems * bandOffsets.length, bandOffsets);

    SunWritableRaster ras = new SunWritableRaster(pism, d, new Point(0, 0));
    return ras;
}

From source file:omr.jai.TestImage3.java

public static void print(PlanarImage pi) {
        // Show the image dimensions and coordinates.
        System.out.print("Image Dimensions: ");
        System.out.print(pi.getWidth() + "x" + pi.getHeight() + " pixels");

        // Remember getMaxX and getMaxY return the coordinate of the next point!
        System.out.println(" (from " + pi.getMinX() + "," + pi.getMinY() + " to " + (pi.getMaxX() - 1) + ","
                + (pi.getMaxY() - 1) + ")");
        if ((pi.getNumXTiles() != 1) || (pi.getNumYTiles() != 1)) { // Is it tiled?
            // Tiles number, dimensions and coordinates.
            System.out.print("Tiles: ");
            System.out.print(pi.getTileWidth() + "x" + pi.getTileHeight() + " pixels" + " (" + pi.getNumXTiles()
                    + "x" + pi.getNumYTiles() + " tiles)");
            System.out.print(" (from " + pi.getMinTileX() + "," + pi.getMinTileY() + " to " + pi.getMaxTileX() + ","
                    + pi.getMaxTileY() + ")");
            System.out.println(" offset: " + pi.getTileGridXOffset() + "," + pi.getTileGridXOffset());
        }/*from   w w  w .j  a  va 2 s . c  om*/

        // Display info about the SampleModel of the image.
        SampleModel sm = pi.getSampleModel();
        System.out.println("Number of bands: " + sm.getNumBands());
        System.out.print("Data type: ");
        switch (sm.getDataType()) {
        case DataBuffer.TYPE_BYTE:
            System.out.println("byte");
            break;
        case DataBuffer.TYPE_SHORT:
            System.out.println("short");
            break;
        case DataBuffer.TYPE_USHORT:
            System.out.println("ushort");
            break;
        case DataBuffer.TYPE_INT:
            System.out.println("int");
            break;
        case DataBuffer.TYPE_FLOAT:
            System.out.println("float");
            break;
        case DataBuffer.TYPE_DOUBLE:
            System.out.println("double");
            break;
        case DataBuffer.TYPE_UNDEFINED:
            System.out.println("undefined");
            break;
        }

        // Display info about the ColorModel of the image.
        ColorModel cm = pi.getColorModel();
        if (cm != null) {
            System.out.println("Number of color components: " + cm.getNumComponents());
            System.out.println("Bits per pixel: " + cm.getPixelSize());
            System.out.print("Image Transparency: ");
            switch (cm.getTransparency()) {
            case Transparency.OPAQUE:
                System.out.println("opaque");
                break;
            case Transparency.BITMASK:
                System.out.println("bitmask");
                break;
            case Transparency.TRANSLUCENT:
                System.out.println("translucent");
                break;
            }
        } else
            System.out.println("No color model.");
    }

From source file:it.geosolutions.jaiext.range.RangeTest.java

@Test
public void testRangeTimeByte1or2Points() {
    if (!SINGLE_POINT) {
        switch (TEST_SELECTOR) {
        case DataBuffer.TYPE_BYTE:
            testRangeTimeByte(rangeB2bounds, SINGLE_POINT);
            break;
        case DataBuffer.TYPE_SHORT:
            testRangeTimeShort(rangeS2bounds, SINGLE_POINT);
            break;
        case DataBuffer.TYPE_INT:
            testRangeTimeInteger(rangeI2bounds, SINGLE_POINT);
            break;
        case DataBuffer.TYPE_FLOAT:
            testRangeTimeFloat(rangeF2bounds, SINGLE_POINT);
            break;
        case DataBuffer.TYPE_DOUBLE:
            testRangeTimeDouble(rangeD2bounds, SINGLE_POINT);
            break;
        default:/*  w w  w. j a v  a2  s. c  o m*/
            throw new IllegalArgumentException("Wrong data type");
        }
    } else {
        switch (TEST_SELECTOR) {
        case DataBuffer.TYPE_BYTE:
            testRangeTimeByte(rangeBpoint, SINGLE_POINT);
            break;
        case DataBuffer.TYPE_SHORT:
            testRangeTimeShort(rangeSpoint, SINGLE_POINT);
            break;
        case DataBuffer.TYPE_INT:
            testRangeTimeInteger(rangeIpoint, SINGLE_POINT);
            break;
        case DataBuffer.TYPE_FLOAT:
            testRangeTimeFloat(rangeFpoint, SINGLE_POINT);
            break;
        case DataBuffer.TYPE_DOUBLE:
            testRangeTimeDouble(rangeDpoint, SINGLE_POINT);
            break;
        default:
            throw new IllegalArgumentException("Wrong data type");
        }
    }
}

From source file:it.geosolutions.imageio.plugins.nitronitf.ImageIOUtils.java

/**
 * Utility method for creating a BufferedImage from a source raster Currently only Float->Byte and Byte->Byte are supported. Will throw an
 * {@link UnsupportedOperationException} if the conversion is not supported.
 * /*  w  w w  .  j  a v a2 s .c o m*/
 * @param raster
 * @param imageType
 * @return
 */
public static BufferedImage rasterToBufferedImage(Raster raster, ImageTypeSpecifier imageType) {
    if (imageType == null) {
        if (raster.getDataBuffer().getDataType() == DataBuffer.TYPE_BYTE)
            imageType = ImageTypeSpecifier.createGrayscale(8, DataBuffer.TYPE_BYTE, false);
        else
            throw new IllegalArgumentException("unable to dynamically determine the imageType");
    }
    // create a new buffered image, for display
    BufferedImage bufImage = imageType.createBufferedImage(raster.getWidth(), raster.getHeight());

    if (raster.getDataBuffer().getDataType() == DataBuffer.TYPE_USHORT
            && bufImage.getRaster().getDataBuffer().getDataType() == DataBuffer.TYPE_BYTE) {
        // convert short pixels to bytes
        short[] shortData = ((DataBufferUShort) raster.getDataBuffer()).getData();
        byte[] byteData = ((DataBufferByte) bufImage.getWritableTile(0, 0).getDataBuffer()).getData();
        ImageIOUtils.shortToByteBuffer(shortData, byteData, 1, raster.getNumBands());
    } else if (raster.getDataBuffer().getDataType() == DataBuffer.TYPE_FLOAT
            && bufImage.getRaster().getDataBuffer().getDataType() == DataBuffer.TYPE_BYTE) {
        // convert float pixels to bytes
        float[] floatData = ((DataBufferFloat) raster.getDataBuffer()).getData();
        byte[] byteData = ((DataBufferByte) bufImage.getWritableTile(0, 0).getDataBuffer()).getData();
        ImageIOUtils.floatToByteBuffer(floatData, byteData, 1, raster.getNumBands());
    } else if (raster.getDataBuffer().getDataType() == DataBuffer.TYPE_DOUBLE
            && bufImage.getRaster().getDataBuffer().getDataType() == DataBuffer.TYPE_BYTE) {
        // convert double pixels to bytes
        double[] doubleData = ((DataBufferDouble) raster.getDataBuffer()).getData();
        byte[] byteData = ((DataBufferByte) bufImage.getWritableTile(0, 0).getDataBuffer()).getData();
        ImageIOUtils.doubleToByteBuffer(doubleData, byteData, 1, raster.getNumBands());
    } else if ((raster.getDataBuffer().getDataType() == DataBuffer.TYPE_BYTE
            && bufImage.getRaster().getDataBuffer().getDataType() == DataBuffer.TYPE_BYTE)
            || (raster.getDataBuffer().getDataType() == DataBuffer.TYPE_USHORT
                    && bufImage.getRaster().getDataBuffer().getDataType() == DataBuffer.TYPE_USHORT)
            || (raster.getDataBuffer().getDataType() == DataBuffer.TYPE_SHORT
                    && bufImage.getRaster().getDataBuffer().getDataType() == DataBuffer.TYPE_SHORT)) {
        bufImage.setData(raster);
    } else {
        throw new UnsupportedOperationException(
                "Unable to convert raster type to bufferedImage type: " + raster.getDataBuffer().getDataType()
                        + " ==> " + bufImage.getRaster().getDataBuffer().getDataType());
    }
    return bufImage;
}

From source file:it.geosolutions.jaiext.range.RangeTest.java

@Test
public void testJaiToolsRangeTimeByte1or2Points() {
    if (!SINGLE_POINT) {
        switch (TEST_SELECTOR) {
        case DataBuffer.TYPE_BYTE:
            testJaiToolsRangeTime(rangeJTB, SINGLE_POINT, arrayBtest);
            break;
        case DataBuffer.TYPE_SHORT:
            testJaiToolsRangeTime(rangeJTS, SINGLE_POINT, arrayStest);
            break;
        case DataBuffer.TYPE_INT:
            testJaiToolsRangeTime(rangeJTI, SINGLE_POINT, arrayItest);
            break;
        case DataBuffer.TYPE_FLOAT:
            testJaiToolsRangeTime(rangeJTF, SINGLE_POINT, arrayFtest);
            break;
        case DataBuffer.TYPE_DOUBLE:
            testJaiToolsRangeTime(rangeJTD, SINGLE_POINT, arrayDtest);
            break;
        default:/*from  w ww .  j av  a2  s  . c  om*/
            throw new IllegalArgumentException("Wrong data type");
        }
    } else {
        switch (TEST_SELECTOR) {
        case DataBuffer.TYPE_BYTE:
            testJaiToolsRangeTime(rangeJTBpoint, SINGLE_POINT, arrayBtest);
            break;
        case DataBuffer.TYPE_SHORT:
            testJaiToolsRangeTime(rangeJTSpoint, SINGLE_POINT, arrayStest);
            break;
        case DataBuffer.TYPE_INT:
            testJaiToolsRangeTime(rangeJTIpoint, SINGLE_POINT, arrayItest);
            break;
        case DataBuffer.TYPE_FLOAT:
            testJaiToolsRangeTime(rangeJTFpoint, SINGLE_POINT, arrayFtest);
            break;
        case DataBuffer.TYPE_DOUBLE:
            testJaiToolsRangeTime(rangeJTDpoint, SINGLE_POINT, arrayDtest);
            break;
        default:
            throw new IllegalArgumentException("Wrong data type");
        }
    }
}

From source file:it.geosolutions.jaiext.range.RangeTest.java

@Test
public void testJAIRangeTimeByte1or2Points() {
    if (!SINGLE_POINT) {
        switch (TEST_SELECTOR) {
        case DataBuffer.TYPE_BYTE:
            testJAIRangeTime(rangeJAIB, SINGLE_POINT, arrayBtest);
            break;
        case DataBuffer.TYPE_SHORT:
            testJAIRangeTime(rangeJAIS, SINGLE_POINT, arrayStest);
            break;
        case DataBuffer.TYPE_INT:
            testJAIRangeTime(rangeJAII, SINGLE_POINT, arrayItest);
            break;
        case DataBuffer.TYPE_FLOAT:
            testJAIRangeTime(rangeJAIF, SINGLE_POINT, arrayFtest);
            break;
        case DataBuffer.TYPE_DOUBLE:
            testJAIRangeTime(rangeJAID, SINGLE_POINT, arrayDtest);
            break;
        default://w  w  w  .j  a  v  a2  s.  c o m
            throw new IllegalArgumentException("Wrong data type");
        }
    } else {
        switch (TEST_SELECTOR) {
        case DataBuffer.TYPE_BYTE:
            testJAIRangeTime(rangeJAIBpoint, SINGLE_POINT, arrayBtest);
            break;
        case DataBuffer.TYPE_SHORT:
            testJAIRangeTime(rangeJAISpoint, SINGLE_POINT, arrayStest);
            break;
        case DataBuffer.TYPE_INT:
            testJAIRangeTime(rangeJAIIpoint, SINGLE_POINT, arrayItest);
            break;
        case DataBuffer.TYPE_FLOAT:
            testJAIRangeTime(rangeJAIFpoint, SINGLE_POINT, arrayFtest);
            break;
        case DataBuffer.TYPE_DOUBLE:
            testJAIRangeTime(rangeJAIDpoint, SINGLE_POINT, arrayDtest);
            break;
        default:
            throw new IllegalArgumentException("Wrong data type");
        }
    }
}

From source file:it.geosolutions.jaiext.range.RangeTest.java

@Test
public void testApacheCommonRangeTimeByte1or2Points() {

    if (!SINGLE_POINT) {
        switch (TEST_SELECTOR) {
        case DataBuffer.TYPE_BYTE:
            testApacheCommonsRangeTime(rangeCommonsB, SINGLE_POINT, arrayBtest);
            break;
        case DataBuffer.TYPE_SHORT:
            testApacheCommonsRangeTime(rangeCommonsS, SINGLE_POINT, arrayStest);
            break;
        case DataBuffer.TYPE_INT:
            testApacheCommonsRangeTime(rangeCommonsI, SINGLE_POINT, arrayItest);
            break;
        case DataBuffer.TYPE_FLOAT:
            testApacheCommonsRangeTime(rangeCommonsF, SINGLE_POINT, arrayFtest);
            break;
        case DataBuffer.TYPE_DOUBLE:
            testApacheCommonsRangeTime(rangeCommonsD, SINGLE_POINT, arrayDtest);
            break;
        default:/*  w  ww .j av a  2s.  com*/
            throw new IllegalArgumentException("Wrong data type");
        }
    } else {
        switch (TEST_SELECTOR) {
        case DataBuffer.TYPE_BYTE:
            testApacheCommonsRangeTime(rangeCommonsBpoint, SINGLE_POINT, arrayBtest);
            break;
        case DataBuffer.TYPE_SHORT:
            testApacheCommonsRangeTime(rangeCommonsSpoint, SINGLE_POINT, arrayStest);
            break;
        case DataBuffer.TYPE_INT:
            testApacheCommonsRangeTime(rangeCommonsIpoint, SINGLE_POINT, arrayItest);
            break;
        case DataBuffer.TYPE_FLOAT:
            testApacheCommonsRangeTime(rangeCommonsFpoint, SINGLE_POINT, arrayFtest);
            break;
        case DataBuffer.TYPE_DOUBLE:
            testApacheCommonsRangeTime(rangeCommonsDpoint, SINGLE_POINT, arrayDtest);
            break;
        default:
            throw new IllegalArgumentException("Wrong data type");
        }
    }
}