List of usage examples for java.awt.image ColorModel createCompatibleWritableRaster
public WritableRaster createCompatibleWritableRaster(int w, int h)
From source file:ImageOpByRomain.java
/** * {@inheritDoc}/*from w ww .j a v a2 s .c om*/ */ public BufferedImage createCompatibleDestImage(BufferedImage src, ColorModel destCM) { if (destCM == null) { destCM = src.getColorModel(); } return new BufferedImage(destCM, destCM.createCompatibleWritableRaster(src.getWidth(), src.getHeight()), destCM.isAlphaPremultiplied(), null); }
From source file:ome.logic.AWTScaleService.java
public BufferedImage scaleBufferedImage(BufferedImage image, float xScale, float yScale) { int thumbHeight = (int) (image.getHeight() * yScale); int thumbWidth = (int) (image.getWidth() * xScale); log.info("Scaling to: " + thumbHeight + "x" + thumbWidth); // Create the required compatible (thumbnail) buffered image to avoid // potential errors from Java's ImagingLib. ColorModel cm = image.getColorModel(); WritableRaster r = cm.createCompatibleWritableRaster(thumbWidth, thumbHeight); BufferedImage thumbImage = new BufferedImage(cm, r, false, null); // Do the actual scaling and return the result Graphics2D graphics2D = thumbImage.createGraphics(); // graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, // RenderingHints.VALUE_INTERPOLATION_BILINEAR); graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null); return thumbImage; }
From source file:org.apache.pdfbox.pdmodel.graphics.xobject.PDInlinedImage.java
/** * This will take the inlined image information and create a java.awt.Image from * it./*from w w w . j av a2 s . c om*/ * * @param colorSpaces The ColorSpace dictionary from the current resources, if any. * * @return The image that this object represents. * * @throws IOException If there is an error creating the image. */ public BufferedImage createImage(Map colorSpaces) throws IOException { /* * This was the previous implementation, not sure which is better right now. * byte[] transparentColors = new byte[]{(byte)0xFF,(byte)0xFF}; byte[] colors=new byte[]{0, (byte)0xFF}; IndexColorModel colorModel = new IndexColorModel( 1, 2, colors, colors, colors, transparentColors ); BufferedImage image = new BufferedImage( params.getWidth(), params.getHeight(), BufferedImage.TYPE_BYTE_BINARY, colorModel ); DataBufferByte buffer = new DataBufferByte( getImageData(), 1 ); WritableRaster raster = Raster.createPackedRaster( buffer, params.getWidth(), params.getHeight(), params.getBitsPerComponent(), new Point(0,0) ); image.setData( raster ); return image; */ //verify again pci32.pdf before changing below PDColorSpace pcs = params.getColorSpace(colorSpaces); ColorModel colorModel; if (pcs != null) { colorModel = pcs.createColorModel(params.getBitsPerComponent()); } else { byte[] transparentColors = new byte[] { (byte) 0xFF, (byte) 0xFF }; byte[] colors = new byte[] { 0, (byte) 0xFF }; colorModel = new IndexColorModel(1, 2, colors, colors, colors, transparentColors); } boolean invert = false; // maybe a decode array is defined COSBase dictObj = params.getDictionary().getDictionaryObject(COSName.DECODE, COSName.D); if (dictObj != null && dictObj instanceof COSArray) { COSArray decode = (COSArray) dictObj; if (decode.getInt(0) == 1) { if (params.getBitsPerComponent() == 1) { // [1.0, 0.0] -> invert the "color" values invert = true; } else { //TODO implement decode array for BPC > 1 LOG.warn("decode array is not implemented for BPC > 1"); } } } List filters = params.getFilters(); byte[] finalData; if (filters == null || filters.isEmpty()) { finalData = getImageData(); } else { ByteArrayInputStream in = new ByteArrayInputStream(getImageData()); ByteArrayOutputStream out = new ByteArrayOutputStream(getImageData().length); FilterManager filterManager = new FilterManager(); for (int i = 0; i < filters.size(); i++) { out.reset(); Filter filter = filterManager.getFilter((String) filters.get(i)); filter.decode(in, out, params.getDictionary(), i); in = new ByteArrayInputStream(out.toByteArray()); } finalData = out.toByteArray(); } WritableRaster raster = colorModel.createCompatibleWritableRaster(params.getWidth(), params.getHeight()); /* Raster.createPackedRaster( buffer, params.getWidth(), params.getHeight(), params.getBitsPerComponent(), new Point(0,0) ); */ DataBuffer rasterBuffer = raster.getDataBuffer(); if (rasterBuffer instanceof DataBufferByte) { DataBufferByte byteBuffer = (DataBufferByte) rasterBuffer; byte[] data = byteBuffer.getData(); System.arraycopy(finalData, 0, data, 0, data.length); if (invert) { invertBitmap(data); } } else if (rasterBuffer instanceof DataBufferInt) { DataBufferInt byteBuffer = (DataBufferInt) rasterBuffer; int[] data = byteBuffer.getData(); for (int i = 0; i < finalData.length; i++) { data[i] = (finalData[i] + 256) % 256; if (invert) { data[i] = (~data[i] & 0xFF); } } } BufferedImage image = new BufferedImage(colorModel, raster, false, null); image.setData(raster); return image; }
From source file:org.apache.pdfbox.pdmodel.graphics.xobject.PDPixelMap.java
/** * Returns a {@link java.awt.image.BufferedImage} of the COSStream * set in the constructor or null if the COSStream could not be encoded. * * @return {@inheritDoc}//from w ww. j ava 2 s . c om * * @throws IOException {@inheritDoc} */ public BufferedImage getRGBImage() throws IOException { if (image != null) { return image; } try { int width = getWidth(); int height = getHeight(); int bpc = getBitsPerComponent(); byte[] array = getPDStream().getByteArray(); if (array.length == 0) { LOG.error("Something went wrong ... the pixelmap doesn't contain any data."); return null; } // Get the ColorModel right PDColorSpace colorspace = getColorSpace(); if (colorspace == null) { LOG.error("getColorSpace() returned NULL. Predictor = " + getPredictor()); return null; } ColorModel cm = null; if (colorspace instanceof PDIndexed) { PDIndexed csIndexed = (PDIndexed) colorspace; // the base color space uses 8 bit per component, as the indexed color values // of an indexed color space are always in a range from 0 to 255 ColorModel baseColorModel = csIndexed.getBaseColorSpace().createColorModel(8); // number of possible color values in the target color space int numberOfColorValues = 1 << bpc; // number of indexed color values int highValue = csIndexed.getHighValue(); // choose the correct size, sometimes there are more indexed values than needed // and sometimes there are fewer indexed value than possible int size = Math.min(numberOfColorValues - 1, highValue); byte[] index = csIndexed.getLookupData(); boolean hasAlpha = baseColorModel.hasAlpha(); COSBase maskArray = getMask(); if (baseColorModel.getTransferType() != DataBuffer.TYPE_BYTE) { throw new IOException("Not implemented"); } // the IndexColorModel uses RGB-based color values // which leads to 3 color components and a optional alpha channel int numberOfComponents = 3 + (hasAlpha ? 1 : 0); int buffersize = (size + 1) * numberOfComponents; byte[] colorValues = new byte[buffersize]; byte[] inData = new byte[baseColorModel.getNumComponents()]; int bufferIndex = 0; for (int i = 0; i <= size; i++) { System.arraycopy(index, i * inData.length, inData, 0, inData.length); // convert the indexed color values to RGB colorValues[bufferIndex] = (byte) baseColorModel.getRed(inData); colorValues[bufferIndex + 1] = (byte) baseColorModel.getGreen(inData); colorValues[bufferIndex + 2] = (byte) baseColorModel.getBlue(inData); if (hasAlpha) { colorValues[bufferIndex + 3] = (byte) baseColorModel.getAlpha(inData); } bufferIndex += numberOfComponents; } if (maskArray != null && maskArray instanceof COSArray) { cm = new IndexColorModel(bpc, size + 1, colorValues, 0, hasAlpha, ((COSArray) maskArray).getInt(0)); } else { cm = new IndexColorModel(bpc, size + 1, colorValues, 0, hasAlpha); } } else if (colorspace instanceof PDSeparation) { PDSeparation csSeparation = (PDSeparation) colorspace; int numberOfComponents = csSeparation.getAlternateColorSpace().getNumberOfComponents(); PDFunction tintTransformFunc = csSeparation.getTintTransform(); COSArray decode = getDecode(); // we have to invert the tint-values, // if the Decode array exists and consists of (1,0) boolean invert = decode != null && decode.getInt(0) == 1; // TODO add interpolation for other decode values then 1,0 int maxValue = (int) Math.pow(2, bpc) - 1; // destination array byte[] mappedData = new byte[width * height * numberOfComponents]; int rowLength = width * numberOfComponents; float[] input = new float[1]; for (int i = 0; i < height; i++) { int rowOffset = i * rowLength; for (int j = 0; j < width; j++) { // scale tint values to a range of 0...1 int value = (array[i * width + j] + 256) % 256; if (invert) { input[0] = 1 - (value / maxValue); } else { input[0] = value / maxValue; } float[] mappedColor = tintTransformFunc.eval(input); int columnOffset = j * numberOfComponents; for (int k = 0; k < numberOfComponents; k++) { // redo scaling for every single color value float mappedValue = mappedColor[k]; mappedData[rowOffset + columnOffset + k] = (byte) (mappedValue * maxValue); } } } array = mappedData; cm = colorspace.createColorModel(bpc); } else if (bpc == 1) { byte[] map = null; if (colorspace instanceof PDDeviceGray) { COSArray decode = getDecode(); // we have to invert the b/w-values, // if the Decode array exists and consists of (1,0) if (decode != null && decode.getInt(0) == 1) { map = new byte[] { (byte) 0xff }; } else { map = new byte[] { (byte) 0x00, (byte) 0xff }; } } else if (colorspace instanceof PDICCBased) { if (((PDICCBased) colorspace).getNumberOfComponents() == 1) { map = new byte[] { (byte) 0xff }; } else { map = new byte[] { (byte) 0x00, (byte) 0xff }; } } else { map = new byte[] { (byte) 0x00, (byte) 0xff }; } cm = new IndexColorModel(bpc, map.length, map, map, map, Transparency.OPAQUE); } else { if (colorspace instanceof PDICCBased) { if (((PDICCBased) colorspace).getNumberOfComponents() == 1) { byte[] map = new byte[] { (byte) 0xff }; cm = new IndexColorModel(bpc, 1, map, map, map, Transparency.OPAQUE); } else { cm = colorspace.createColorModel(bpc); } } else { cm = colorspace.createColorModel(bpc); } } LOG.debug("ColorModel: " + cm.toString()); WritableRaster raster = cm.createCompatibleWritableRaster(width, height); DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer(); byte[] bufferData = buffer.getData(); System.arraycopy(array, 0, bufferData, 0, (array.length < bufferData.length ? array.length : bufferData.length)); image = new BufferedImage(cm, raster, false, null); // If there is a 'soft mask' image then we use that as a transparency mask. PDXObjectImage smask = getSMaskImage(); if (smask != null) { BufferedImage smaskBI = smask.getRGBImage(); COSArray decodeArray = smask.getDecode(); CompositeImage compositeImage = new CompositeImage(image, smaskBI); BufferedImage rgbImage = compositeImage.createMaskedImage(decodeArray); return rgbImage; } else if (getImageMask()) { BufferedImage stencilMask = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D graphics = (Graphics2D) stencilMask.getGraphics(); if (getStencilColor() != null) { graphics.setColor(getStencilColor().getJavaColor()); } else { // this might happen when using ExractImages, see PDFBOX-1145 LOG.debug("no stencil color for PixelMap found, using Color.BLACK instead."); graphics.setColor(Color.BLACK); } graphics.fillRect(0, 0, width, height); // assume default values ([0,1]) for the DecodeArray // TODO DecodeArray == [1,0] graphics.setComposite(AlphaComposite.DstIn); graphics.drawImage(image, null, 0, 0); return stencilMask; } else { // if there is no mask, use the unaltered image. return image; } } catch (Exception exception) { LOG.error(exception, exception); //A NULL return is caught in pagedrawer.Invoke.process() so don't re-throw. //Returning the NULL falls through to Phillip Koch's TODO section. return null; } }
From source file:org.apache.pdfbox.rendering.TilingPaint.java
/** * Returns the pattern image in parent stream coordinates. *//* ww w . j av a2s .c o m*/ private BufferedImage getImage(PageDrawer drawer, PDTilingPattern pattern, PDColorSpace colorSpace, PDColor color, AffineTransform xform, Rectangle2D anchorRect) throws IOException { ColorSpace outputCS = ColorSpace.getInstance(ColorSpace.CS_sRGB); ColorModel cm = new ComponentColorModel(outputCS, true, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE); float width = (float) Math.abs(anchorRect.getWidth()); float height = (float) Math.abs(anchorRect.getHeight()); // device scale transform (i.e. DPI) (see PDFBOX-1466.pdf) Matrix xformMatrix = new Matrix(xform); float xScale = Math.abs(xformMatrix.getScalingFactorX()); float yScale = Math.abs(xformMatrix.getScalingFactorY()); width *= xScale; height *= yScale; int rasterWidth = Math.max(1, ceiling(width)); int rasterHeight = Math.max(1, ceiling(height)); // create raster WritableRaster raster = cm.createCompatibleWritableRaster(rasterWidth, rasterHeight); BufferedImage image = new BufferedImage(cm, raster, false, null); Graphics2D graphics = image.createGraphics(); // flip a -ve YStep around its own axis (see gs-bugzilla694385.pdf) if (pattern.getYStep() < 0) { graphics.translate(0, rasterHeight); graphics.scale(1, -1); } // flip a -ve XStep around its own axis if (pattern.getXStep() < 0) { graphics.translate(rasterWidth, 0); graphics.scale(-1, 1); } // device scale transform (i.e. DPI) graphics.scale(xScale, yScale); // apply only the scaling from the pattern transform, doing scaling here improves the // image quality and prevents large scale-down factors from creating huge tiling cells. Matrix newPatternMatrix; newPatternMatrix = Matrix.getScaleInstance(Math.abs(patternMatrix.getScalingFactorX()), Math.abs(patternMatrix.getScalingFactorY())); // move origin to (0,0) newPatternMatrix.concatenate(Matrix.getTranslateInstance(-pattern.getBBox().getLowerLeftX(), -pattern.getBBox().getLowerLeftY())); // render using PageDrawer drawer.drawTilingPattern(graphics, pattern, colorSpace, color, newPatternMatrix); graphics.dispose(); return image; }
From source file:org.deegree.ogcwebservices.wms.dataaccess.ID2PInterpolation.java
private void createImage() { ColorModel ccm; if (use32Bits) { image = new BufferedImage(getMap.getWidth(), getMap.getHeight(), BufferedImage.TYPE_INT_ARGB); } else {//from w ww . ja va2s . c o m ccm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_GRAY), null, false, false, Transparency.OPAQUE, DataBuffer.TYPE_USHORT); WritableRaster wr = ccm.createCompatibleWritableRaster(getMap.getWidth(), getMap.getHeight()); image = new BufferedImage(ccm, wr, false, new Hashtable<Object, Object>()); } }
From source file:org.pentaho.reporting.engine.classic.core.modules.output.pageable.pdf.internal.PdfGraphics2D.java
/** * @noinspection UseOfObsoleteCollectionType * @see Graphics2D#drawRenderedImage(RenderedImage, AffineTransform) */// w w w . j a v a 2s.c o m @Override public void drawRenderedImage(final RenderedImage img, final AffineTransform xform) { final BufferedImage image; if (img instanceof BufferedImage) { image = (BufferedImage) img; } else { final ColorModel cm = img.getColorModel(); final int width = img.getWidth(); final int height = img.getHeight(); final WritableRaster raster = cm.createCompatibleWritableRaster(width, height); final boolean isAlphaPremultiplied = cm.isAlphaPremultiplied(); final Hashtable properties = new Hashtable(); final String[] keys = img.getPropertyNames(); if (keys != null) { final int keyCount = keys.length; for (int i = 0; i < keyCount; i++) { properties.put(keys[i], img.getProperty(keys[i])); } } final BufferedImage result = new BufferedImage(cm, raster, isAlphaPremultiplied, properties); img.copyData(raster); image = result; } drawImage(image, xform, null); }
From source file:org.sbs.util.ImageCompress.java
/** * ?//ww w . j a v a2s . c o m * * @param source * @param targetW * @param targetH * @return */ public BufferedImage resize(BufferedImage source, int targetW, int targetH) { // targetWtargetH int desH = 0; int type = source.getType(); BufferedImage target = null; double sx = (double) targetW / source.getWidth(); double sy = sx; desH = (int) (sx * source.getHeight()); if (desH < targetH) { desH = targetH; sy = (double) 61 / source.getHeight(); } if (type == BufferedImage.TYPE_CUSTOM) { // handmade ColorModel cm = source.getColorModel(); WritableRaster raster = cm.createCompatibleWritableRaster(targetW, desH); boolean alphaPremultiplied = cm.isAlphaPremultiplied(); target = new BufferedImage(cm, raster, alphaPremultiplied, null); } else target = new BufferedImage(targetW, desH, type); Graphics2D g = target.createGraphics(); // smoother than exlax: g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy)); g.dispose(); return target; }