WritableRaster raster = offscreenImage.getRaster(); WritableRaster newRaster; newRaster = raster.createWritableChild(0, 0, width, height, 0, 0, new int[] {0, 1, 2}); DirectColorModel cm = (DirectColorModel) offscreenImage.getColorModel(); DirectColorModel newCM = new DirectColorModel(cm.getPixelSize(), cm.getRedMask(), cm.getGreenMask(), cm.getBlueMask()); BufferedImage rgbBuffer = new BufferedImage(newCM, newRaster, false, null); try { ImageIO.write(rgbBuffer, suffix, file);
private RgbaAccessor getAccessor(Raster raster, ColorModel cm) { RgbaAccessor accessor; if (cm instanceof DirectColorModel && cm.getTransferType() == DataBuffer.TYPE_INT) { DirectColorModel dcm = (DirectColorModel) cm; if (dcm.getRedMask() == 0x00FF0000 && dcm.getGreenMask() == 0x0000FF00 && dcm.getBlueMask() == 0x000000FF && (dcm.getNumComponents() == 3 || dcm.getAlphaMask() == 0xFF000000)) { accessor = new IntegerRgbAccessor(raster, cm.hasAlpha()); } else if (dcm.getRedMask() == 0x000000FF && dcm.getGreenMask() == 0x0000FF00 && dcm.getBlueMask() == 0x00FF0000 && (dcm.getNumComponents() == 3 || dcm.getAlphaMask() == 0xFF000000)) { accessor = new IntegerBgrAccessor(raster, cm.hasAlpha()); } else { throw new RasterFormatException(
@MethodHook(value = "<init>", end = true) @Inject public void init(int width, int height, Component canvas) { if (!client.isGpu()) { return; } final int[] pixels = getPixels(); // we need to make our own buffered image for the client with the alpha channel enabled in order to // have alphas for the overlays applied correctly DataBufferInt dataBufferInt = new DataBufferInt(pixels, pixels.length); DirectColorModel directColorModel = new DirectColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), 32, 0xff0000, 0xff00, 0xff, 0xff000000, true, DataBuffer.TYPE_INT); WritableRaster writableRaster = Raster.createWritableRaster(directColorModel.createCompatibleSampleModel(width, height), dataBufferInt, null); BufferedImage bufferedImage = new BufferedImage(directColorModel, writableRaster, true, new Hashtable()); setImage(bufferedImage); }
public static ImageData convertToSWT( BufferedImage bufferedImage ) { if ( bufferedImage.getColorModel() instanceof DirectColorModel ) { DirectColorModel colorModel = (DirectColorModel) bufferedImage.getColorModel(); PaletteData palette = new PaletteData( colorModel.getRedMask(), colorModel.getGreenMask(), colorModel.getBlueMask() ); ImageData data = new ImageData( bufferedImage.getWidth(), bufferedImage.getHeight(), colorModel.getPixelSize(), palette ); WritableRaster raster = bufferedImage.getRaster(); int[] pixelArray = new int[4]; } 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]; byte[] blues = new byte[size]; colorModel.getReds( reds ); colorModel.getGreens( greens ); colorModel.getBlues( blues ); RGB[] rgbs = new RGB[size];
ImageIO.setUseCache(false); /* Don't use file cache - too small to be worth it */ if(fmt.getFileExt().equals("jpg")) { WritableRaster raster = img.getRaster(); WritableRaster newRaster = raster.createWritableChild(0, 0, img.getWidth(), img.getHeight(), 0, 0, new int[] {0, 1, 2}); DirectColorModel cm = (DirectColorModel)img.getColorModel(); DirectColorModel newCM = new DirectColorModel(cm.getPixelSize(), cm.getRedMask(), cm.getGreenMask(), cm.getBlueMask()); BufferedImage rgbBuffer = new BufferedImage(newCM, newRaster, false, null);
public static void RGB2CMYK(ICC_ColorSpace cmykColorSpace, int[] rgb, float[][] C, float[][] M, float[][] Y, float[][] K, int imageWidth, int imageHeight) { DataBuffer db = new DataBufferInt(rgb, rgb.length); WritableRaster raster = Raster.createPackedRaster(db, imageWidth, imageHeight, imageWidth, new int[] {0x00ff0000, 0x0000ff00, 0x000000ff}, null); ColorSpace sRGB = ColorSpace.getInstance(ColorSpace.CS_sRGB); ColorConvertOp cco = new ColorConvertOp(sRGB, cmykColorSpace, null); BufferedImage rgbImage = new BufferedImage(new DirectColorModel(24, 0x00ff0000, 0x0000ff00, 0x000000ff), raster, false, null); BufferedImage cmykImage = cco.filter(rgbImage, null); WritableRaster cmykRaster = cmykImage.getRaster(); byte[] cmyk = (byte[])cmykRaster.getDataElements(0, 0, imageWidth, imageHeight, null); for(int i = 0, index = 0; i < imageHeight; i++) { for(int j = 0; j < imageWidth; j++) { C[i][j] = (cmyk[index++]&0xff) - 128.0f; M[i][j] = (cmyk[index++]&0xff) - 128.0f; Y[i][j] = (cmyk[index++]&0xff) - 128.0f; K[i][j] = (cmyk[index++]&0xff) - 128.0f; } } }
PaletteData palette = data.palette; if (palette.isDirect) { colorModel = new DirectColorModel(data.depth, palette.redMask, palette.greenMask, palette.blueMask); BufferedImage bufferedImage = new BufferedImage(colorModel, colorModel.createCompatibleWritableRaster(data.width, data.height), false, null); for (int y = 0; y < data.height; y++) { for (int x = 0; x < data.width; x++) { int pixel = data.getPixel(x, y); RGB rgb = palette.getRGB(pixel); bufferedImage.setRGB(x, y, rgb.red << 16 | rgb.green << 8 | rgb.blue); colorModel = new IndexColorModel(data.depth, rgbs.length, red, green, blue, data.transparentPixel); } else { colorModel = new IndexColorModel(data.depth, rgbs.length, red, green, blue); BufferedImage bufferedImage = new BufferedImage(colorModel, colorModel.createCompatibleWritableRaster(data.width, data.height), false, null); WritableRaster raster = bufferedImage.getRaster(); int[] pixelArray = new int[1];
public BufferedImage convertToIntDiscrete(Raster raster) { if (!isCompatibleRaster(raster)) throw new IllegalArgumentException( "This raster is not compatible with this PaletteColorModel."); ColorModel cm = new DirectColorModel(getColorSpace(), 24, 0xff0000, 0x00ff00, 0x0000ff, 0, false, DataBuffer.TYPE_INT); int w = raster.getWidth(); int h = raster.getHeight(); WritableRaster discreteRaster = cm.createCompatibleWritableRaster(w, h); int[] discretData = ((DataBufferInt) discreteRaster.getDataBuffer()).getData(); DataBuffer data = raster.getDataBuffer(); if (data instanceof DataBufferByte) { byte[] pixels = ((DataBufferByte) data).getData(); for (int i = 0; i < pixels.length; i++) discretData[i] = getRGB(pixels[i]); } else { short[] pixels = ((DataBufferUShort) data).getData(); for (int i = 0; i < pixels.length; i++) discretData[i] = getRGB(pixels[i]); } return new BufferedImage(cm, discreteRaster, false, null); }
cm = new DirectColorModel(16, 0x7C00, 0x3E0, 0x1F); buffer = new DataBufferUShort(strideElementsAligned * height); raster = Raster.createPackedRaster(buffer, bih.biWidth, height, strideElementsAligned, ((DirectColorModel) cm).getMasks(), null); case 32: strideElementsAligned = strideBytesAligned / 4; cm = new DirectColorModel(32, 0xFF0000, 0xFF00, 0xFF); buffer = new DataBufferInt(strideElementsAligned * height); raster = Raster.createPackedRaster(buffer, bih.biWidth, height, strideElementsAligned, ((DirectColorModel) cm).getMasks(), null); return new BufferedImage(cm, raster, false, null);
private byte[] bufferedImageToJPEG(ImageInfo imageInfo, int[] pixels) throws Exception { BufferedImage bufferedImage = new BufferedImage(imageInfo.width, imageInfo.height, BufferedImage.TYPE_INT_ARGB); bufferedImage.setRGB(0, 0, imageInfo.width, imageInfo.height, pixels, 0, imageInfo.width); ImageWriter writer = ImageIO.getImageWritersByFormatName("jpeg").next(); ImageWriteParam writeParam = writer.getDefaultWriteParam(); ColorModel colorModel = new DirectColorModel(24, 0x00ff0000, 0x0000ff00, 0x000000ff); ImageTypeSpecifier imageTypeSpecifier = new ImageTypeSpecifier(colorModel, colorModel.createCompatibleSampleModel(1, 1)); writeParam.setDestinationType(imageTypeSpecifier); writeParam.setSourceBands(new int[] {0, 1, 2}); writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); float q = 1.0f; if (quality != null) q = quality.floatValue(); writeParam.setCompressionQuality(q); DAByteArrayOutputStream buffer = new DAByteArrayOutputStream(); writer.setOutput(new MemoryCacheImageOutputStream(buffer)); IIOImage ioImage = new IIOImage(bufferedImage, null, null); writer.write(null, ioImage, writeParam); writer.dispose(); return buffer.getDirectByteArray(); }
palette[paletteEntry.index] = paletteEntry.getBestARGB(); colorModel = new IndexColorModel(8, xpmHeader.palette.size(), palette, 0, true, -1, DataBuffer.TYPE_BYTE); raster = Raster.createInterleavedRaster( palette[paletteEntry.index] = paletteEntry.getBestARGB(); colorModel = new IndexColorModel(16, xpmHeader.palette.size(), palette, 0, true, -1, DataBuffer.TYPE_USHORT); raster = Raster.createInterleavedRaster( bpp = 16; } else { colorModel = new DirectColorModel(32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000); raster = Raster.createPackedRaster(DataBuffer.TYPE_INT, final BufferedImage image = new BufferedImage(colorModel, raster, colorModel.isAlphaPremultiplied(), new Properties()); final DataBuffer dataBuffer = raster.getDataBuffer(); final StringBuilder row = new StringBuilder();
cm = new DirectColorModel(15, 0x7C00, 0x03E0, 0x001F); // See BufferedImage TYPE_USHORT_555_RGB DataBuffer db = new DataBufferUShort(shortArray, shortArray.length); raster = Raster.createPackedRaster(db, srcRect.width, srcRect.height, srcRect.width, ((DirectColorModel) cm).getMasks(), null); cm = ColorModel.getRGBdefault(); DataBuffer db = new DataBufferInt(pixArray, pixArray.length); raster = Raster.createPackedRaster(db, srcRect.width, srcRect.height, srcRect.width, ((DirectColorModel) cm).getMasks(), null); BufferedImage img = new BufferedImage(cm, raster, cm.isAlphaPremultiplied(), null);
int dataType = sampleModel.getDataType(); int[] sampleSize = sampleModel.getSampleSize(); int numBands = sampleModel.getNumBands(); colorSpace = ColorSpace.getInstance(ColorSpace.CS_GRAY); } else if(numBands <= 4) { colorSpace = ColorSpace.getInstance(ColorSpace.CS_sRGB); } else { colorSpace = new BogusColorSpace(numBands); return new DirectColorModel(bits, rmask, gmask, bmask, amask); colorModel = new IndexColorModel(bitsPerSample, numEntries, map, map, map);
public static void debugRaster(Raster raster, String name) { ColorModel colorModel; int numBands = raster.getNumBands(); if (numBands == 4) { // normal color image colorModel = new DirectColorModel( ColorSpace.getInstance(ColorSpace.CS_sRGB), 32, 0x00ff0000,// Red 0x0000ff00,// Green 0x000000ff,// Blue 0xff000000,// Alpha true, // Alpha Premultiplied DataBuffer.TYPE_INT ); } else if (numBands == 1) { // grayscale image ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY); int[] nBits = {8}; colorModel = new ComponentColorModel(cs, nBits, false, true, Transparency.OPAQUE, DataBuffer.TYPE_BYTE); } else { throw new IllegalStateException("numBands = " + numBands); } Raster correctlyTranslated = raster.createChild( raster.getMinX(), raster.getMinY(), raster.getWidth(), raster.getHeight(), 0, 0, null); BufferedImage debugImage = new BufferedImage(colorModel, (WritableRaster) correctlyTranslated, true, null); debugImage(debugImage, name); }
/** Gets 24-bit RGB pixels from a buffer. Returns null if conversion failed. */ protected int[] getRGB24(Buffer buf) { if (buf.data instanceof int[]) { return (int[]) buf.data; } if (buf.data instanceof BufferedImage) { BufferedImage image = (BufferedImage) buf.data; if (image.getColorModel() instanceof DirectColorModel) { DirectColorModel dcm = (DirectColorModel) image.getColorModel(); if (dcm.getBlueMask() == 0xff && dcm.getGreenMask() == 0xff00 && dcm.getRedMask() == 0xff0000) { if (image.getRaster().getDataBuffer() instanceof DataBufferInt) { return ((DataBufferInt) image.getRaster().getDataBuffer()).getData(); } } } return image.getRGB(0, 0, // outputFormat.get(WidthKey), outputFormat.get(HeightKey), // null, 0, outputFormat.get(WidthKey)); } return null; }
private void readBitmap16(final BitmapDescriptor pBitmap) throws IOException { // TODO: No idea if this actually works.. short[] pixels = new short[pBitmap.getWidth() * pBitmap.getHeight()]; // TODO: Support TYPE_USHORT_565 and the RGB 444/ARGB 4444 layouts // Will create TYPE_USHORT_555 DirectColorModel cm = new DirectColorModel(16, 0x7C00, 0x03E0, 0x001F); DataBuffer buffer = new DataBufferShort(pixels, pixels.length); WritableRaster raster = Raster.createPackedRaster( buffer, pBitmap.getWidth(), pBitmap.getHeight(), pBitmap.getWidth(), cm.getMasks(), null ); pBitmap.image = new BufferedImage(cm, raster, cm.isAlphaPremultiplied(), null); for (int y = 0; y < pBitmap.getHeight(); y++) { int offset = (pBitmap.getHeight() - y - 1) * pBitmap.getWidth(); imageInput.readFully(pixels, offset, pBitmap.getWidth()); // Skip to 32 bit boundary if (pBitmap.getWidth() % 2 != 0) { imageInput.readShort(); } if (abortRequested()) { processReadAborted(); break; } processImageProgress(100 * y / (float) pBitmap.getHeight()); } // TODO: Might be mask!? }
protected static BufferedImage makeBufferedImage(Raster raster) { // create a generic colour model and reuse the wraster, intent // is that this should save quite bit of memory DirectColorModel colorModel = new DirectColorModel(24, 0x00ff0000, // Red 0x0000ff00, // Green 0x000000ff, // Blue 0x0 // Alpha ); raster = colorModel.createCompatibleWritableRaster(raster.getWidth(), raster.getHeight()); return new BufferedImage(colorModel, (WritableRaster) raster, false, null); // return new BufferedImage(raster.getWidth(), raster.getHeight(), BufferedImage.TYPE_INT_RGB); }
protected static ColorModel fixColorModel(CachableRed src) { ColorModel cm = src.getColorModel(); if (cm.hasAlpha()) { if (!cm.isAlphaPremultiplied()) cm = GraphicsUtil.coerceColorModel(cm, true); return cm; } int b = src.getSampleModel().getNumBands()+1; if (b > 4) throw new IllegalArgumentException ("CompositeRed can only handle up to three band images"); int [] masks = new int[4]; for (int i=0; i < b-1; i++) masks[i] = 0xFF0000 >> (8*i); masks[3] = 0xFF << (8*(b-1)); ColorSpace cs = cm.getColorSpace(); return new DirectColorModel(cs, 8*b, masks[0], masks[1], masks[2], masks[3], true, DataBuffer.TYPE_INT); } }
private boolean isCompatible(ColorModel colorModel, SampleModel sampleModel){ ColorSpace cs = colorModel.getColorSpace(); // Check that model is sRGB or linear RGB if((cs != ColorSpace.getInstance(ColorSpace.CS_sRGB)) && (cs != ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB))) return false; // Check ColorModel is of type DirectColorModel if(!(colorModel instanceof DirectColorModel)) return false; // Check transfer type if(sampleModel.getDataType() != DataBuffer.TYPE_INT) return false; // Check red, green, blue and alpha mask DirectColorModel dcm = (DirectColorModel)colorModel; if(dcm.getRedMask() != 0x00ff0000) return false; if(dcm.getGreenMask() != 0x0000ff00) return false; if(dcm.getBlueMask() != 0x000000ff) return false; if(dcm.getAlphaMask() != 0xff000000) return false; return true; }
width = sm.getWidth(); height = sm.getHeight(); bitsPerPixel = (short)cm.getPixelSize(); redMask = dcm.getRedMask(); greenMask = dcm.getGreenMask(); blueMask = dcm.getBlueMask(); alphaMask = dcm.getAlphaMask(); paletteSize = icm.getMapSize(); byte[] b = new byte[paletteSize]; icm.getReds(r); icm.getGreens(g); icm.getBlues(b);