public Color getChannelColor() { if (lut == null || mode == GRAYSCALE) return Color.black; IndexColorModel cm = lut[getChannelIndex()]; if (cm == null) return Color.black; int index = cm.getMapSize() - 1; int r = cm.getRed(index); int g = cm.getGreen(index); int b = cm.getBlue(index); // IJ.log(index+" "+r+" "+g+" "+b); if (r < 100 || g < 100 || b < 100) return new Color(r, g, b); else return Color.black; }
public void paint(Graphics g) { g.setColor(Color.GRAY); g.drawRect(5, 5, 30, 20); if (cm != null && color > -1) { int red = cm.getRed(color); int green = cm.getGreen(color); int blue = cm.getBlue(color); g.setColor(new Color(red, green, blue)); g.fillRect(6, 6, 29, 19); } else { g.setColor(Color.LIGHT_GRAY); g.fillRect(6, 6, 29, 19); } }
public void encode(RenderedImage im) throws IOException { // Get the SampleModel. SampleModel sm = im.getSampleModel(); // Check the data type, band count, and sample size. int dataType = sm.getTransferType(); if (dataType == DataBuffer.TYPE_FLOAT || dataType == DataBuffer.TYPE_DOUBLE) { throw new IllegalArgumentException(JaiI18N.getString("WBMPImageEncoder0")); } else if (sm.getNumBands() != 1) { throw new IllegalArgumentException(JaiI18N.getString("WBMPImageEncoder1")); } else if (sm.getSampleSize(0) != 1) { throw new IllegalArgumentException(JaiI18N.getString("WBMPImageEncoder2")); } // Save image dimensions. int width = im.getWidth(); int height = im.getHeight(); // Write WBMP header. output.write(0); // TypeField output.write(0); // FixHeaderField output.write(intToMultiByte(width)); // width output.write(intToMultiByte(height)); // height Raster tile = null; // If the data are not formatted nominally then reformat. if (sm.getDataType() != DataBuffer.TYPE_BYTE || !(sm instanceof MultiPixelPackedSampleModel) || ((MultiPixelPackedSampleModel) sm).getDataBitOffset() != 0) { MultiPixelPackedSampleModel mppsm = new MultiPixelPackedSampleModel( DataBuffer.TYPE_BYTE, width, height, 1, (width + 7) / 8, 0); WritableRaster raster = Raster.createWritableRaster(mppsm, new Point(im.getMinX(), im.getMinY())); raster.setRect(im.getData()); tile = raster; } else if (im.getNumXTiles() == 1 && im.getNumYTiles() == 1) { tile = im.getTile(im.getMinTileX(), im.getMinTileY()); } else { tile = im.getData(); } // Check whether the image is white-is-zero. boolean isWhiteZero = false; if (im.getColorModel() instanceof IndexColorModel) { IndexColorModel icm = (IndexColorModel) im.getColorModel(); isWhiteZero = (icm.getRed(0) + icm.getGreen(0) + icm.getBlue(0)) > (icm.getRed(1) + icm.getGreen(1) + icm.getBlue(1)); } // Get the line stride, bytes per row, and data array. int lineStride = ((MultiPixelPackedSampleModel) sm).getScanlineStride(); int bytesPerRow = (width + 7) / 8; byte[] bdata = ((DataBufferByte) tile.getDataBuffer()).getData(); // Write the data. if (!isWhiteZero && lineStride == bytesPerRow) { // Write the entire image. output.write(bdata, 0, height * bytesPerRow); } else { // Write the image row-by-row. int offset = 0; if (!isWhiteZero) { // Black-is-zero for (int row = 0; row < height; row++) { output.write(bdata, offset, bytesPerRow); offset += lineStride; } } else { // White-is-zero: need to invert data. byte[] inverted = new byte[bytesPerRow]; for (int row = 0; row < height; row++) { for (int col = 0; col < bytesPerRow; col++) { inverted[col] = (byte) (~(bdata[col + offset])); } output.write(inverted, 0, bytesPerRow); offset += lineStride; } } } }