diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/ImageUtil.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/ImageUtil.java index eeb670523f79ae48c0cc728b9dd3c0585b840ffe..b1b09962833dbbc500870db6e8845393f6a05664 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/ImageUtil.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/ImageUtil.java @@ -39,6 +39,8 @@ import javax.imageio.ImageIO; import org.apache.commons.io.FilenameUtils; import ar.com.hjg.pngj.ImageInfo; +import ar.com.hjg.pngj.ImageLine; +import ar.com.hjg.pngj.ImageLineHelper; import ar.com.hjg.pngj.PngFilterType; import ar.com.hjg.pngj.PngWriter; @@ -328,19 +330,22 @@ public class ImageUtil { final int cols = image.getWidth(); final int rows = image.getHeight(); + int bitDepth = image.getColorModel().getComponentSize(0); + ImageInfo imgInfo = new ImageInfo(cols, rows, bitDepth, false, false, false); PngWriter png = - new PngWriter(out, new ImageInfo(cols, rows, image.getColorModel() - .getComponentSize(0), false, true, false)); + new PngWriter(out, imgInfo); png.setFilterType(filterType == null ? PngFilterType.FILTER_DEFAULT : filterType); png.setCompLevel(compressionLevel == -1 ? 6 : compressionLevel); - int[] rowData = new int[cols]; + ImageLine imageLine = new ImageLine(imgInfo); for (int row = 0; row < rows; ++row) { for (int col = 0; col < cols; ++col) { - rowData[col] = image.getRaster().getSample(col, row, 0); + int pixel = image.getRGB(col, row); + ImageLineHelper.setPixelRGB8(imageLine, col, pixel); } - png.writeRow(rowData, row); + imageLine.setRown(row); + png.writeRow(imageLine); } png.end(); } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/Hdf5ThumbnailGenerator.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/Hdf5ThumbnailGenerator.java index 1067b4f8431a00cbffb35a6e1dd6e32530936d64..bb018f9b2bda0fa57842afea16180e90c00e86e1 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/Hdf5ThumbnailGenerator.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/Hdf5ThumbnailGenerator.java @@ -26,8 +26,6 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; -import javax.imageio.ImageIO; - import org.apache.log4j.Logger; import ch.systemsx.cisd.base.utilities.OSUtilities; @@ -197,9 +195,7 @@ class Hdf5ThumbnailGenerator implements IHDF5WriterClient ImageUtil.rescale(image, thumbnailsStorageFormat.getMaxWidth(), thumbnailsStorageFormat.getMaxHeight(), false, thumbnailsStorageFormat.isHighQuality()); - // TODO 2011-08-31, Franz-Josef Elmer: Uncomment when new fast method is working correctly for colored images -// ImageUtil.writeImageToPng(thumbnail, bufferOutputStream); - ImageIO.write(thumbnail, "png", bufferOutputStream); + ImageUtil.writeImageToPng(thumbnail, bufferOutputStream); return bufferOutputStream.toByteArray(); } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/transformations/ConvertToolImageTransformer.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/transformations/ConvertToolImageTransformer.java index 171285ed5ea347273f5bb6f00dbdebc1f76d436c..dc165b41fccaefaaf2a04366eface172644a3921 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/transformations/ConvertToolImageTransformer.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dto/api/v1/transformations/ConvertToolImageTransformer.java @@ -30,8 +30,6 @@ import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; -import javax.imageio.ImageIO; - import org.apache.log4j.Logger; import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel; @@ -50,6 +48,7 @@ import ch.systemsx.cisd.imagereaders.ImageID; import ch.systemsx.cisd.imagereaders.ImageReaderConstants; import ch.systemsx.cisd.imagereaders.ImageReaderFactory; import ch.systemsx.cisd.openbis.dss.etl.dto.api.v1.transformations.ConvertToolImageTransformerFactory.ToolChoice; +import ch.systemsx.cisd.openbis.dss.generic.shared.utils.ImageUtil; /** * An {@link IStreamingImageTransformer} using the convert command line tool for transformations. @@ -128,10 +127,7 @@ public class ConvertToolImageTransformer implements IStreamingImageTransformer { try { - // TODO 2011-08-31, Franz-Josef Elmer: Uncomment when new fast method is working - // correctly for colored images - // byte[] input = ImageUtil.imageToPngFast(image); - byte[] input = toByteArray(image); + byte[] input = ImageUtil.imageToPngFast(image); byte[] output = transform(input); return toBufferedImage(output); } catch (IOException ioex) @@ -265,11 +261,4 @@ public class ConvertToolImageTransformer implements IStreamingImageTransformer return result; } - private byte[] toByteArray(BufferedImage image) throws IOException - { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ImageIO.write(image, PNG, bos); - return bos.toByteArray(); - } - } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageChannelsUtils.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageChannelsUtils.java index 5b0f23c4d72eb7f264f8cd532c8525e5647f3587..4bef593d90d88f3833144d992085db663daf346b 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageChannelsUtils.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/generic/server/images/ImageChannelsUtils.java @@ -869,22 +869,7 @@ public class ImageChannelsUtils private static IContent createPngContent(BufferedImage image, String nameOrNull) { - // TODO 2011-08-31, Franz-Josef Elmer: Uncomment when new fast method is working correctly for colored images -// final byte[] output = ImageUtil.imageToPngFast(image); - final byte[] output = writeBufferImageAsPng(image).toByteArray(); + final byte[] output = ImageUtil.imageToPngFast(image); return new ByteArrayBasedContent(output, nameOrNull); } - - private static ByteArrayOutputStream writeBufferImageAsPng(BufferedImage image) - { - ByteArrayOutputStream output = new ByteArrayOutputStream(); - try - { - ImageIO.write(image, "png", output); - } catch (IOException ex) - { - throw EnvironmentFailureException.fromTemplate("Cannot encode image.", ex); - } - return output; - } }