From d1339756821db0683ccb44cc34f28b52602993fe Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Thu, 7 Apr 2011 09:24:05 +0000 Subject: [PATCH] LMS-2160 done SVN: 20699 --- .../dss/etl/AbsoluteImageReference.java | 16 +++++++++++++++- .../etl/dataaccess/ImagingDatasetLoader.java | 18 ++++++++++++++++++ .../server/images/ImageChannelsUtils.java | 7 +------ 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbsoluteImageReference.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbsoluteImageReference.java index 1adc6e9a4c3..27c9c41fe7f 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbsoluteImageReference.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/AbsoluteImageReference.java @@ -16,9 +16,12 @@ package ch.systemsx.cisd.openbis.dss.etl; +import java.awt.image.BufferedImage; + import ch.systemsx.cisd.common.io.IContent; import ch.systemsx.cisd.openbis.dss.etl.dto.ImageTransfomationFactories; import ch.systemsx.cisd.openbis.dss.generic.server.images.dto.RequestedImageSize; +import ch.systemsx.cisd.openbis.dss.generic.shared.utils.ImageUtil; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.ColorComponent; /** @@ -30,13 +33,15 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.Color public class AbsoluteImageReference extends AbstractImageReference { private final IContent content; - + private final String uniqueId; private final RequestedImageSize imageSize; private final ImageTransfomationFactories imageTransfomationFactories; + private BufferedImage image; + // This is an artificial value which helps to keep coloring channels constant. Starts with 0. // Unique for a given experiment or dataset (if channels are per dataset). private int channelIndex; @@ -72,6 +77,15 @@ public class AbsoluteImageReference extends AbstractImageReference { return content; } + + public BufferedImage getImage() + { + if (image == null) + { + image = ImageUtil.loadImage(content, tryGetPage()); + } + return image; + } public RequestedImageSize getRequestedSize() { diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImagingDatasetLoader.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImagingDatasetLoader.java index c24810d9657..bb85b38b535 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImagingDatasetLoader.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/dataaccess/ImagingDatasetLoader.java @@ -16,6 +16,8 @@ package ch.systemsx.cisd.openbis.dss.etl.dataaccess; +import java.awt.image.BufferedImage; + import org.apache.commons.lang.StringUtils; import ch.systemsx.cisd.base.image.IImageTransformerFactory; @@ -30,6 +32,7 @@ import ch.systemsx.cisd.openbis.dss.generic.server.images.dto.ImageChannelStackR import ch.systemsx.cisd.openbis.dss.generic.server.images.dto.ImageChannelStackReference.HCSChannelStackByLocationReference; import ch.systemsx.cisd.openbis.dss.generic.server.images.dto.ImageChannelStackReference.MicroscopyChannelStackByLocationReference; import ch.systemsx.cisd.openbis.dss.generic.server.images.dto.RequestedImageSize; +import ch.systemsx.cisd.openbis.dss.generic.shared.dto.Size; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.HCSDatasetLoader; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.ColorComponent; import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.IImagingReadonlyQueryDAO; @@ -82,6 +85,21 @@ public class ImagingDatasetLoader extends HCSDatasetLoader implements IImagingDa return null; } AbsoluteImageReference imgRef = createAbsoluteImageReference(imageDTO, channel, imageSize); + if (thumbnailPrefered) + { + Size requestedThumbnailSize = imageSize.tryGetThumbnailSize(); + BufferedImage image = imgRef.getImage(); + double width = 1.5 * image.getWidth(); + double height = 1.5 * image.getHeight(); + if (requestedThumbnailSize.getWidth() > width || requestedThumbnailSize.getHeight() > height) + { + imageDTO = tryGetImageDTO(channelStackReference, false, channel.getId(), datasetId); + if (imageDTO != null) + { + imgRef = createAbsoluteImageReference(imageDTO, channel, imageSize); + } + } + } return imgRef; } 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 54268f601a0..45536f929b7 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 @@ -430,7 +430,7 @@ public class ImageChannelsUtils private static BufferedImage calculateSingleImage(AbsoluteImageReference imageReference) { long start = operationLog.isDebugEnabled() ? System.currentTimeMillis() : 0; - BufferedImage image = loadImage(imageReference); + BufferedImage image = imageReference.getImage(); if (operationLog.isDebugEnabled()) { operationLog.debug("Load original image: " + (System.currentTimeMillis() - start)); @@ -468,11 +468,6 @@ public class ImageChannelsUtils return image; } - private static BufferedImage loadImage(AbsoluteImageReference imageReference) - { - return ImageUtil.loadImage(imageReference.getContent(), imageReference.tryGetPage()); - } - /** * @param allChannelsMerged if true then we use one special transformation on the merged images * instead of transforming every single image. -- GitLab