private BufferedImage readIndexed() { // 1 byte: xThumb // 1 byte: yThumb // 768 bytes: palette // x * y bytes: 8 bit indexed pixels int w = segment.thumbnail[0] & 0xff; int h = segment.thumbnail[1] & 0xff; int[] rgbs = new int[256]; for (int i = 0; i < rgbs.length; i++) { rgbs[i] = (segment.thumbnail[3 * i + 2] & 0xff) << 16 | (segment.thumbnail[3 * i + 3] & 0xff) << 8 | (segment.thumbnail[3 * i + 4] & 0xff); } IndexColorModel icm = new InverseColorMapIndexColorModel(8, rgbs.length, rgbs, 0, false, -1, DataBuffer.TYPE_BYTE); DataBufferByte buffer = new DataBufferByte(segment.thumbnail, segment.thumbnail.length - 770, 770); WritableRaster raster = Raster.createPackedRaster(buffer, w, h, 8, null); return new BufferedImage(icm, raster, icm.isAlphaPremultiplied(), null); }
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); }
public BufferedImage createImageIndexed() { // TODO: This is very stupid, maybe we need a TYPE_CUSTOM image, with separate alphaRaster?! // As ICO has a separate bitmask, not related to palette index (allows 256 colors + trans) :-P IndexColorModel icm = createColorModel(); // This is slightly obscure, and should probably be moved.. Hashtable<String, Object> properties = null; if (entry instanceof DirectoryEntry.CUREntry) { properties = new Hashtable<>(1); properties.put("cursor_hotspot", ((DirectoryEntry.CUREntry) this.entry).getHotspot()); } BufferedImage image = new BufferedImage( icm, icm.createCompatibleWritableRaster(getWidth(), getHeight()), icm.isAlphaPremultiplied(), properties ); WritableRaster raster = image.getRaster(); // Make pixels transparent according to mask final int trans = icm.getTransparentPixel(); for (int y = 0; y < getHeight(); y++) { for (int x = 0; x < getWidth(); x++) { if (mask.isTransparent(x, y)) { bits[x + getWidth() * y] = trans; } } } raster.setSamples(0, 0, getWidth(), getHeight(), 0, bits); return image; }
public MutableIndexColorModel(final IndexColorModel base) { super(base.getPixelSize(), base.getComponentSize(), base.getColorSpace(), base.hasAlpha(), base.isAlphaPremultiplied(), base.getTransparency(), base.getTransferType()); this.rgbs = getRGBs(base); }
public static void main(String[] args) { byte[] palette = new byte[16 * 3]; // 16 color palette without alpha byte[] pixels = new byte[(16 * 16 * 4) / 8]; // 16 * 16 * 4 bit Random random = new Random(); // For test purposes, just fill arrays with random data random.nextBytes(palette); random.nextBytes(pixels); // Create ColorModel & Raster from palette and pixels IndexColorModel cm = new IndexColorModel(4, 16, palette, 0, false, -1); // -1 for no transparency DataBufferByte buffer = new DataBufferByte(pixels, pixels.length); WritableRaster raster = Raster.createPackedRaster(buffer, 16, 16, 4, null); // Create BufferedImage from CM and Raster final BufferedImage image = new BufferedImage(cm, raster, cm.isAlphaPremultiplied(), null); System.out.println("image: " + image); // "image: BufferedImage@...: type = 12 ..." SwingUtilities.invokeLater(new Runnable() { @Override public void run() { JFrame frame = new JFrame("Foo"); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.add(new JLabel(new ImageIcon(image))); frame.pack(); frame.setVisible(true); } }); }
private BufferedImage readImage(final WbmpHeader wbmpHeader, final InputStream is) throws IOException { final int rowLength = (wbmpHeader.width + 7) / 8; final byte[] image = readBytes("Pixels", is, rowLength * wbmpHeader.height, "Error reading image pixels"); final DataBufferByte dataBuffer = new DataBufferByte(image, image.length); final WritableRaster raster = Raster.createPackedRaster(dataBuffer, wbmpHeader.width, wbmpHeader.height, 1, null); final int[] palette = { 0x000000, 0xffffff }; final IndexColorModel colorModel = new IndexColorModel(1, 2, palette, 0, false, -1, DataBuffer.TYPE_BYTE); return new BufferedImage(colorModel, raster, colorModel.isAlphaPremultiplied(), new Properties()); }
private BufferedImage readIndexed() { // 1 byte: xThumb // 1 byte: yThumb // 768 bytes: palette // x * y bytes: 8 bit indexed pixels int w = segment.thumbnail[0] & 0xff; int h = segment.thumbnail[1] & 0xff; int[] rgbs = new int[256]; for (int i = 0; i < rgbs.length; i++) { rgbs[i] = (segment.thumbnail[3 * i + 2] & 0xff) << 16 | (segment.thumbnail[3 * i + 3] & 0xff) << 8 | (segment.thumbnail[3 * i + 4] & 0xff); } IndexColorModel icm = new InverseColorMapIndexColorModel(8, rgbs.length, rgbs, 0, false, -1, DataBuffer.TYPE_BYTE); DataBufferByte buffer = new DataBufferByte(segment.thumbnail, segment.thumbnail.length - 770, 770); WritableRaster raster = Raster.createPackedRaster(buffer, w, h, 8, null); return new BufferedImage(icm, raster, icm.isAlphaPremultiplied(), null); }
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); }
public BufferedImage createImageIndexed() { // TODO: This is very stupid, maybe we need a TYPE_CUSTOM image, with separate alphaRaster?! // As ICO has a separate bitmask, not related to palette index (allows 256 colors + trans) :-P IndexColorModel icm = createColorModel(); // This is slightly obscure, and should probably be moved.. Hashtable<String, Object> properties = null; if (entry instanceof DirectoryEntry.CUREntry) { properties = new Hashtable<>(1); properties.put("cursor_hotspot", ((DirectoryEntry.CUREntry) this.entry).getHotspot()); } BufferedImage image = new BufferedImage( icm, icm.createCompatibleWritableRaster(getWidth(), getHeight()), icm.isAlphaPremultiplied(), properties ); WritableRaster raster = image.getRaster(); // Make pixels transparent according to mask final int trans = icm.getTransparentPixel(); for (int y = 0; y < getHeight(); y++) { for (int x = 0; x < getWidth(); x++) { if (mask.isTransparent(x, y)) { bits[x + getWidth() * y] = trans; } } } raster.setSamples(0, 0, getWidth(), getHeight(), 0, bits); return image; }
public MutableIndexColorModel(final IndexColorModel base) { super(base.getPixelSize(), base.getComponentSize(), base.getColorSpace(), base.hasAlpha(), base.isAlphaPremultiplied(), base.getTransparency(), base.getTransferType()); this.rgbs = getRGBs(base); }
public BufferedImage createImageIndexed() { // TODO: This is very stupid, maybe we need a TYPE_CUSTOM image, with separate alphaRaster?! // As ICO has a separate bitmask, not related to palette index (allows 256 colors + trans) :-P IndexColorModel icm = createColorModel(); // This is slightly obscure, and should probably be moved.. Hashtable<String, Object> properties = null; if (entry instanceof DirectoryEntry.CUREntry) { properties = new Hashtable<String, Object>(1); properties.put("cursor_hotspot", ((DirectoryEntry.CUREntry) this.entry).getHotspot()); } BufferedImage image = new BufferedImage( icm, icm.createCompatibleWritableRaster(getWidth(), getHeight()), icm.isAlphaPremultiplied(), properties ); WritableRaster raster = image.getRaster(); // Make pixels transparent according to mask final int trans = icm.getTransparentPixel(); for (int y = 0; y < getHeight(); y++) { for (int x = 0; x < getWidth(); x++) { if (mask.isTransparent(x, y)) { bits[x + getWidth() * y] = trans; } } } raster.setSamples(0, 0, getWidth(), getHeight(), 0, bits); //System.out.println("Image: " + image); return image; }
palette, 0, false, -1, DataBuffer.TYPE_BYTE); return new BufferedImage(colorModel, raster, colorModel.isAlphaPremultiplied(), new Properties()); } else if (pcxHeader.bitsPerPixel == 1 && 2 <= pcxHeader.nPlanes && pcxHeader.nPlanes <= 4) {
bgColorIndex = icm.getTransparentPixel(); } else { if (icm.hasAlpha() && icm.isAlphaPremultiplied()) {