/** * Retrieves the images composing the grid when the color model is <code>RBG</code> and when the * channels are not mapped to red, green or blue i.e. a channel mapped to yellow. */ private void retrieveGridImages() { List<BufferedImage> images = parent.getGridImages(); if (images != null) { Iterator<BufferedImage> i = images.iterator(); boolean b = originalGridImages.size() == 0; BufferedImage img; while (i.hasNext()) { img = i.next(); gridImages.add(Factory.magnifyImage(img, gridRatio, 0)); if (b) originalGridImages.add(img); } combinedImage = Factory.magnifyImage(renderedImage, gridRatio, 0); } }
/** * Sets the ratio of the grid image. * * @param gridRatio The value to set. */ void setGridRatio(double gridRatio) { // if (ratio == 1) return; //We don't want to be too small. double max = ZoomGridAction.MAX_ZOOM_FACTOR; if (gridRatio > max) return; this.gridRatio = gridRatio; if (ImViewerAgent.hasOpenGLSupport()) return; if (CollectionUtils.isEmpty(originalGridImages)) { try { createGridImages(); } catch (Exception e) { handleGridImageCreationException(e); } return; } int n = originalGridImages.size(); clearList(gridImages); int maxC = parent.getMaxC(); switch (n) { case 0: for (int i = 0; i < maxC; i++) gridImages.add(null); break; case 1: case 2: case 3: // TODO: Review that code. if (isImageMappedRGB(parent.getActiveChannels())) { try { createGridImages(); } catch (Exception e) { handleGridImageCreationException(e); } } else { combinedImage = null; combinedImage = Factory.magnifyImage(gridRatio, renderedImage); Iterator<BufferedImage> i = originalGridImages.iterator(); while (i.hasNext()) { gridImages.add(Factory.magnifyImage(gridRatio, i.next())); } } break; default: combinedImage = null; combinedImage = Factory.magnifyImage(gridRatio, renderedImage); Iterator<BufferedImage> i = originalGridImages.iterator(); while (i.hasNext()) { gridImages.add(Factory.magnifyImage(gridRatio, i.next())); } } }
/** * Retrieves the images composing the grid when the color model is <code>GreyScale</code> and when * the channels are not mapped to red, green or blue i.e. a channel mapped to yellow. * * @param channels Collection of active channels in the grid. */ private void retrieveGridImagesForGreyScale(List channels) { List<BufferedImage> images = parent.getGridImages(); if (images != null) { int last = images.size() - 1; combinedImage = Factory.magnifyImage(gridRatio, images.get(last)); images.remove(last); Iterator<BufferedImage> i = images.iterator(); boolean b = originalGridImages.size() == 0 && !isImageMappedRGB(channels); BufferedImage img; while (i.hasNext()) { img = i.next(); gridImages.add(Factory.magnifyImage(gridRatio, img)); if (b) originalGridImages.add(img); } } }
/** Creates the images composing the grid when the color model is <code>GreyScale</code>. */ private void createGridImagesForGreyScale() { int maxC = parent.getMaxC(); List l = parent.getActiveChannelsInGrid(); int n = l.size(); clearList(gridImages); if (combinedImage != null) combinedImage.flush(); switch (n) { case 0: for (int i = 0; i < maxC; i++) gridImages.add(null); combinedImage = null; break; case 1: case 2: case 3: if (isImageMappedRGB(l)) { BufferedImage image = parent.getCombinedGridImage(); if (image == null) { for (int i = 0; i < maxC; i++) gridImages.add(null); break; } combinedImage = Factory.magnifyImage(gridRatio, image); int w = combinedImage.getWidth(); int h = combinedImage.getHeight(); DataBuffer buf = combinedImage.getRaster().getDataBuffer(); List<ChannelData> list = parent.getSortedChannelData(); Iterator<ChannelData> i = list.iterator(); int index; while (i.hasNext()) { index = i.next().getIndex(); if (l.contains(index)) { if (parent.isChannelRed(index)) { gridImages.add( Factory.createBandImage( buf, w, h, Factory.RED_MASK, Factory.RED_MASK, Factory.RED_MASK)); } else if (parent.isChannelGreen(index)) { gridImages.add( Factory.createBandImage( buf, w, h, Factory.GREEN_MASK, Factory.GREEN_MASK, Factory.GREEN_MASK)); } else if (parent.isChannelBlue(index)) { gridImages.add( Factory.createBandImage( buf, w, h, Factory.BLUE_MASK, Factory.BLUE_MASK, Factory.BLUE_MASK)); } } else { gridImages.add(null); } } } else { retrieveGridImagesForGreyScale(l); } break; default: retrieveGridImagesForGreyScale(l); } }
/** Creates the images composing the grid. */ private void createGridImages() { // if (combinedImage == null) return; if (originalGridImages == null) originalGridImages = new ArrayList<BufferedImage>(); clearList(gridImages); if (ImViewer.GREY_SCALE_MODEL.equals(parent.getColorModel())) { createGridImagesForGreyScale(); return; } List l = parent.getActiveChannels(); int maxC = parent.getMaxC(); switch (l.size()) { case 0: for (int i = 0; i < maxC; i++) gridImages.add(null); break; case 1: case 2: case 3: if (isImageMappedRGB(l) && !parent.isCompressed()) { combinedImage = null; combinedImage = Factory.magnifyImage(gridRatio, renderedImage); int w = combinedImage.getWidth(); int h = combinedImage.getHeight(); DataBuffer buf = combinedImage.getRaster().getDataBuffer(); List<ChannelData> list = parent.getSortedChannelData(); Iterator<ChannelData> i = list.iterator(); int index; while (i.hasNext()) { index = i.next().getIndex(); if (parent.isChannelActive(index)) { if (parent.isChannelRed(index)) { gridImages.add( Factory.createBandImage( buf, w, h, Factory.RED_MASK, Factory.BLANK_MASK, Factory.BLANK_MASK)); } else if (parent.isChannelGreen(index)) { gridImages.add( Factory.createBandImage( buf, w, h, Factory.BLANK_MASK, Factory.GREEN_MASK, Factory.BLANK_MASK)); } else if (parent.isChannelBlue(index)) { gridImages.add( Factory.createBandImage( buf, w, h, Factory.BLANK_MASK, Factory.BLANK_MASK, Factory.BLUE_MASK)); } } else { gridImages.add(null); } } } else { retrieveGridImages(); } break; default: retrieveGridImages(); } }
/** * Creates the {@link #displayedImage}. The method should be invoked after the {@link * #setRenderedImage(BufferedImage)} method. */ void createDisplayedProjectedImage() { if (projectedImage == null) return; if (displayedProjectedImage != null) displayedProjectedImage.flush(); if (zoomFactor != ZoomAction.DEFAULT_ZOOM_FACTOR) { BufferedImage img = null; try { img = Factory.magnifyImage(projectedImage, zoomFactor, 0); } catch (Throwable e) { UserNotifier un = ImViewerAgent.getRegistry().getUserNotifier(); un.notifyInfo("Magnification", "An error occurred while magnifying the image."); } if (img != null) displayedProjectedImage = img; } else displayedProjectedImage = projectedImage; }