use of loci.formats.codec.JPEG2000Codec in project bioformats by openmicroscopy.
the class JPEG2000Writer method compressBuffer.
/**
* Compresses the buffer.
*
* @param no the image index within the current file, starting from 0.
* @param buf the byte array that represents the image tile.
* @param x the X coordinate of the upper-left corner of the image tile.
* @param y the Y coordinate of the upper-left corner of the image tile.
* @param w the width (in pixels) of the image tile.
* @param h the height (in pixels) of the image tile.
* @throws FormatException if one of the parameters is invalid.
* @throws IOException if there was a problem writing to the file.
*/
public byte[] compressBuffer(int no, byte[] buf, int x, int y, int w, int h) throws FormatException, IOException {
checkParams(no, buf, x, y, w, h);
MetadataRetrieve retrieve = getMetadataRetrieve();
boolean littleEndian = false;
if (retrieve.getPixelsBigEndian(series) != null) {
littleEndian = !retrieve.getPixelsBigEndian(series).booleanValue();
} else if (retrieve.getPixelsBinDataCount(series) == 0) {
littleEndian = !retrieve.getPixelsBinDataBigEndian(series, 0).booleanValue();
}
int bytesPerPixel = FormatTools.getBytesPerPixel(FormatTools.pixelTypeFromString(retrieve.getPixelsType(series).toString()));
int nChannels = getSamplesPerPixel();
// To be on the save-side
if (options == null)
options = JPEG2000CodecOptions.getDefaultOptions();
options = new JPEG2000CodecOptions(options);
options.width = w;
options.height = h;
options.channels = nChannels;
options.bitsPerSample = bytesPerPixel * 8;
options.littleEndian = littleEndian;
options.interleaved = interleaved;
options.lossless = compression == null || compression.equals(CompressionType.J2K.getCompression());
options.colorModel = getColorModel();
return new JPEG2000Codec().compress(buf, options);
}
use of loci.formats.codec.JPEG2000Codec in project bioformats by openmicroscopy.
the class JPXReader method openBytes.
/**
* @see loci.formats.IFormatReader#openBytes(int, byte[], int, int, int, int)
*/
@Override
public byte[] openBytes(int no, byte[] buf, int x, int y, int w, int h) throws FormatException, IOException {
FormatTools.checkPlaneParameters(this, no, buf.length, x, y, w, h);
if (lastSeries == getSeries() && lastPlane == no && lastSeriesPlane != null) {
RandomAccessInputStream s = new RandomAccessInputStream(lastSeriesPlane);
readPlane(s, x, y, w, h, buf);
s.close();
return buf;
}
JPEG2000CodecOptions options = JPEG2000CodecOptions.getDefaultOptions();
options.interleaved = isInterleaved();
options.littleEndian = isLittleEndian();
if (resolutionLevels != null) {
options.resolution = Math.abs(getSeries() - resolutionLevels);
} else if (getSeriesCount() > 1) {
options.resolution = getSeries();
}
in.seek(pixelOffsets.get(no));
lastSeriesPlane = new JPEG2000Codec().decompress(in, options);
RandomAccessInputStream s = new RandomAccessInputStream(lastSeriesPlane);
readPlane(s, x, y, w, h, buf);
s.close();
lastSeries = getSeries();
lastPlane = no;
return buf;
}
Aggregations