From b0d10a62e92a13dea900e88d0a7003a64a96f6c0 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Wed, 31 Aug 2011 11:03:12 +0000
Subject: [PATCH] revert using new fast library for PNGs

SVN: 22740
---
 .../dss/etl/Hdf5ThumbnailGenerator.java       |  6 +++++-
 .../ConvertToolImageTransformer.java          | 14 +++++++++++--
 .../server/images/ImageChannelsUtils.java     | 21 ++++++++++++++++++-
 3 files changed, 37 insertions(+), 4 deletions(-)

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 bb018f9b2bd..1067b4f8431 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,6 +26,8 @@ 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;
@@ -195,7 +197,9 @@ class Hdf5ThumbnailGenerator implements IHDF5WriterClient
                 ImageUtil.rescale(image, thumbnailsStorageFormat.getMaxWidth(),
                         thumbnailsStorageFormat.getMaxHeight(), false,
                         thumbnailsStorageFormat.isHighQuality());
-        ImageUtil.writeImageToPng(thumbnail, bufferOutputStream);
+        // 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);
         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 e83d7eac655..085533f7921 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,6 +30,8 @@ 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;
@@ -48,7 +50,6 @@ 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.
@@ -129,7 +130,9 @@ public class ConvertToolImageTransformer implements IStreamingImageTransformer
     {
         try
         {
-            byte[] input = ImageUtil.imageToPngFast(image);
+            // 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[] output = transform(input);
             return toBufferedImage(output);
         } catch (IOException ioex)
@@ -263,4 +266,11 @@ 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 53475650208..5b0f23c4d72 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
@@ -21,11 +21,15 @@ import java.awt.Color;
 import java.awt.Graphics2D;
 import java.awt.image.BufferedImage;
 import java.awt.image.RenderedImage;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import javax.imageio.ImageIO;
+
 import org.apache.log4j.Logger;
 
 import ch.rinn.restrictions.Private;
@@ -862,10 +866,25 @@ public class ImageChannelsUtils
         return new Color(rgb[0], rgb[1], rgb[2], rgb[3]).getRGB();
     }
 
+    
     private static IContent createPngContent(BufferedImage image, String nameOrNull)
     {
-        final byte[] output = ImageUtil.imageToPngFast(image);
+        // 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();
         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;
+    }
 }
-- 
GitLab