/** * Returns the number of row for the grid. * * @return See above. */ int getGridRow() { int n = parent.getMaxC(); if (n == 1) return 1; if (n == 2 || n == 3) return 2; int row = n / 2; if (n % 2 != 0) row += 1; return row; }
/** 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(); } }
/** * 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())); } } }
/** * Returns the size of the grid. * * @return See above. */ Dimension getGridSize() { int w = (int) (getMaxX() * gridRatio); int h = (int) (getMaxY() * gridRatio); int n = parent.getMaxC(); int row = 0; int col = 0; if (n == 1) { row = 1; col = 2; } else if (n == 2 || n == 3) { row = 2; col = 2; } else { col = 3; row = n / 2; if (n % 2 != 0) row += 1; } return new Dimension(col * w + (col - 1) * GAP, row * h + (row - 1) * GAP); }
/** * Returns the number of the channels. * * @return See above. */ int getMaxC() { return parent.getMaxC(); }