private static BufferedImage rgbaToIndexedBufferedImage(final BufferedImage sourceBufferedImage) { final BufferedImage indexedImage = new BufferedImage( sourceBufferedImage.getWidth(), sourceBufferedImage.getHeight(), BufferedImage.TYPE_BYTE_INDEXED); final ColorModel cm = indexedImage.getColorModel(); final IndexColorModel icm = (IndexColorModel) cm; final int size = icm.getMapSize(); final byte[] reds = new byte[size]; final byte[] greens = new byte[size]; final byte[] blues = new byte[size]; icm.getReds(reds); icm.getGreens(greens); icm.getBlues(blues); final WritableRaster raster = indexedImage.getRaster(); final int pixel = raster.getSample(0, 0, 0); final IndexColorModel resultIcm = new IndexColorModel(8, size, reds, greens, blues, pixel); final BufferedImage resultIndexedImage = new BufferedImage(resultIcm, raster, sourceBufferedImage.isAlphaPremultiplied(), null); resultIndexedImage.getGraphics().drawImage(sourceBufferedImage, 0, 0, null); return resultIndexedImage; }
private static IndexedSprite createIndexedSprite(final Client client, final BufferedImage bufferedImage) { final IndexColorModel indexedCM = (IndexColorModel) bufferedImage.getColorModel(); final int width = bufferedImage.getWidth(); final int height = bufferedImage.getHeight(); final byte[] pixels = ((DataBufferByte) bufferedImage.getRaster().getDataBuffer()).getData(); final int[] palette = new int[indexedCM.getMapSize()]; indexedCM.getRGBs(palette); final IndexedSprite newIndexedSprite = client.createIndexedSprite(); newIndexedSprite.setPixels(pixels); newIndexedSprite.setPalette(palette); newIndexedSprite.setWidth(width); newIndexedSprite.setHeight(height); newIndexedSprite.setOriginalWidth(width); newIndexedSprite.setOriginalHeight(height); newIndexedSprite.setOffsetX(0); newIndexedSprite.setOffsetY(0); return newIndexedSprite; }
} else if ( bufferedImage.getColorModel() instanceof IndexColorModel ) { IndexColorModel colorModel = (IndexColorModel) bufferedImage.getColorModel(); int size = colorModel.getMapSize(); byte[] reds = new byte[size]; byte[] greens = new byte[size];
public CMAPChunk(final IndexColorModel pModel) { super(IFF.CHUNK_CMAP, pModel.getMapSize() * 3); model = pModel; }
/** * Creates a defensive copy of the RGB color map in the given * {@code IndexColorModel}. * * @param pColorModel the indexed color model to get RGB values from * @return the RGB color map */ private static int[] getRGBs(IndexColorModel pColorModel) { int[] rgb = new int[pColorModel.getMapSize()]; pColorModel.getRGBs(rgb); return rgb; }
ICOEntry(final int width, final int height, final ColorModel colorModel, int size, final int offset) { this.width = width; this.height = height; this.colorCount = colorModel instanceof IndexColorModel ? ((IndexColorModel) colorModel).getMapSize() : 0; this.planes = 1; this.bitCount = colorModel.getPixelSize(); this.size = size; this.offset = offset; } }
private static int[] getRGBs(final IndexColorModel colorModel) { int[] rgbs = new int[colorModel.getMapSize()]; colorModel.getRGBs(rgbs); return rgbs; }
void writeChunk(final DataOutput pOutput) throws IOException { pOutput.writeInt(chunkId); pOutput.writeInt(chunkLength); final int length = model.getMapSize(); for (int i = 0; i < length; i++) { pOutput.writeByte(model.getRed(i)); pOutput.writeByte(model.getGreen(i)); pOutput.writeByte(model.getBlue(i)); } if (chunkLength % 2 != 0) { pOutput.writeByte(0); // PAD } }
private static MagickImage indexedToMagick(BufferedImage pImage, IndexColorModel pColorModel, boolean pAlpha) throws MagickException { MagickImage image = rgbToMagic(pImage, pAlpha); int mapSize = pColorModel.getMapSize(); image.setNumberColors(mapSize); return image; }
BufferedImage createPaletteImage(final BMHDChunk header, boolean isEHB) throws IIOException { // Create a 1 x colors.length image IndexColorModel cm = getIndexColorModel(header, isEHB); WritableRaster raster = cm.createCompatibleWritableRaster(cm.getMapSize(), 1); byte[] pixel = null; for (int x = 0; x < cm.getMapSize(); x++) { pixel = (byte[]) cm.getDataElements(cm.getRGB(x), pixel); raster.setDataElements(x, 0, pixel); } return new BufferedImage(cm, raster, cm.isAlphaPremultiplied(), null); }
/** * Sets the buffered image to a raster filled with random value using the specified random * number generator. This method can be used for testing purpose, or for adding noise to a * coverage. */ public void setBufferedImage(final Random random) { image = null; // Will forces the creation of a new BufferedImage. final BufferedImage image = getBufferedImage(); final WritableRaster raster = image.getRaster(); final ColorModel model = image.getColorModel(); final int size; if (model instanceof IndexColorModel) { size = ((IndexColorModel) model).getMapSize(); } else { size = 1 << Short.SIZE; } for (int i = raster.getWidth(); --i >= 0; ) { for (int j = raster.getHeight(); --j >= 0; ) { raster.setSample(i, j, 0, random.nextInt(size)); } } }
private short[] createColorMap(final IndexColorModel colorModel, final int sampleSize) { // TIFF6.pdf p. 23: // A TIFF color map is stored as type SHORT, count = 3 * (2^BitsPerSample) // "In a TIFF ColorMap, all the Red values come first, followed by the Green values, then the Blue values. // In the ColorMap, black is represented by 0,0,0 and white is represented by 65535, 65535, 65535." short[] colorMap = new short[(int) (3 * Math.pow(2, sampleSize))]; for (int i = 0; i < colorModel.getMapSize(); i++) { int color = colorModel.getRGB(i); colorMap[i] = (short) upScale((color >> 16) & 0xff); colorMap[i + colorMap.length / 3] = (short) upScale((color >> 8) & 0xff); colorMap[i + 2 * colorMap.length / 3] = (short) upScale((color) & 0xff); } return colorMap; }
/** * Looks for the specified color in the color model * * @param bgColor The color to be searched * @param icm The color model to be searched into * @return The index of the color in the color model, or -1 if not found */ public static int findColorIndex(Color bgColor, IndexColorModel icm) { if (bgColor == null) throw new NullPointerException((Errors.format(ErrorKeys.NULL_ARGUMENT_$1, "bgColor"))); if (icm == null) throw new NullPointerException((Errors.format(ErrorKeys.NULL_ARGUMENT_$1, "icm"))); final int r = bgColor.getRed(); final int g = bgColor.getGreen(); final int b = bgColor.getBlue(); final int a = bgColor.getAlpha(); final int size = icm.getMapSize(); for (int i = 0; i < size; i++) { if (r == icm.getRed(i) && g == icm.getGreen(i) && b == icm.getBlue(i) && (a == icm.getAlpha(i) || !icm.hasAlpha())) return i; } return -1; }
@Override public final boolean isCompatibleRaster(final Raster raster) { int size = raster.getSampleModel().getSampleSize(0); return ((raster.getTransferType() == transferType) && (raster.getNumBands() == 2) && ((1 << size) >= icm.getMapSize())); }
private IIOMetadataNode createPaletteNode() { IIOMetadataNode palette = new IIOMetadataNode("Palette"); IndexColorModel cm = colorData.getIndexColorModel(); for (int i = 0; i < cm.getMapSize(); i++) { IIOMetadataNode entry = new IIOMetadataNode("PaletteEntry"); entry.setAttribute("index", Integer.toString(i)); entry.setAttribute("red", Integer.toString(cm.getRed(i))); entry.setAttribute("green", Integer.toString(cm.getGreen(i))); entry.setAttribute("blue", Integer.toString(cm.getBlue(i))); palette.appendChild(entry); } return palette; }
private InverseColorMapIndexColorModel(IndexColorModel pColorModel, int[] pRGBs) { super(pColorModel.getComponentSize()[0], pColorModel.getMapSize(), pRGBs, 0, pColorModel.getTransferType(), pColorModel.getValidPixels()); rgbs = pRGBs; mapSize = rgbs.length; inverseMap = new InverseColorMap(rgbs); whiteIndex = getWhiteIndex(); }
/** * Color palette associated with the sample dimension. A color palette can have any number of * colors. See palette interpretation for meaning of the palette entries. If the grid coverage * has no color palette, {@code null} will be returned. * * @return The color palette associated with the sample dimension. * @see #getPaletteInterpretation * @see #getColorInterpretation * @see IndexColorModel * @deprecated No replacement. */ public int[][] getPalette() { final ColorModel color = getColorModel(); if (color instanceof IndexColorModel) { final IndexColorModel cm = (IndexColorModel) color; final int[][] colors = new int[cm.getMapSize()][]; for (int i = 0; i < colors.length; i++) { colors[i] = new int[] {cm.getRed(i), cm.getGreen(i), cm.getBlue(i)}; } return colors; } return null; }
static TGAHeader from(final RenderedImage image, final ImageWriteParam param) { notNull(image, "image"); ColorModel colorModel = image.getColorModel(); IndexColorModel colorMap = colorModel instanceof IndexColorModel ? (IndexColorModel) colorModel : null; TGAHeader header = new TGAHeader(); header.colorMapType = colorMap != null ? 1 : 0; header.imageType = getImageType(colorModel, param); header.colorMapStart = 0; header.colorMapSize = colorMap != null ? colorMap.getMapSize() : 0; header.colorMapDepth = colorMap != null ? (colorMap.hasAlpha() ? 32 : 24) : 0; header.x = 0; header.y = 0; header.width = image.getWidth(); // TODO: Param source region/subsampling might affect this header.height = image.getHeight(); // // TODO: Param source region/subsampling might affect this header.pixelDepth = colorModel.getPixelSize() == 15 ? 16 : colorModel.getPixelSize(); header.origin = TGA.ORIGIN_UPPER_LEFT; // TODO: Allow parameter to control this? header.attributeBits = colorModel.hasAlpha() ? 8 : 0; // TODO: FixMe header.identification = null; header.colorMap = colorMap; return header; }
/** * Extract the palette from an {@link IndexColorModel}. * * @param indexColorModel * @return */ public static byte[][] extractPalette(IndexColorModel indexColorModel) { Utilities.ensureNonNull("indexColorModel", indexColorModel); byte[][] palette = new byte[3][indexColorModel.getMapSize()]; int numBands = indexColorModel.getNumColorComponents(); indexColorModel.getReds(palette[0]); indexColorModel.getGreens(palette[0]); indexColorModel.getBlues(palette[0]); if (numBands == 4) { indexColorModel.getAlphas(palette[0]); } return palette; }
assertEquals(64, indexColorModel.getMapSize()); byte[] reds = new byte[indexColorModel.getMapSize()]; indexColorModel.getReds(reds); byte[] blues = new byte[indexColorModel.getMapSize()]; indexColorModel.getBlues(blues); byte[] greens = new byte[indexColorModel.getMapSize()]; indexColorModel.getGreens(greens);