Example usage for java.awt.image.renderable ParameterBlock addSource

List of usage examples for java.awt.image.renderable ParameterBlock addSource

Introduction

In this page you can find the example usage for java.awt.image.renderable ParameterBlock addSource.

Prototype

public ParameterBlock addSource(Object source) 

Source Link

Document

Adds an image to end of the list of sources.

Usage

From source file:fr.gael.dhus.datastore.processing.impl.ProcessingUtils.java

public static RenderedImage ResizeImage(RenderedImage image, int width, int height, float max_ratio,
        boolean can_cut) {
    RenderedImage resizedImage = image;

    /*/*from w  w  w . j ava 2 s .  c o m*/
    // Select the displayable bands
    if (resizedImage.getNumBands () <= 2)
    {
       logger.debug("Grayscale image case");
       resizedImage = JAI.create("bandselect",
       resizedImage, new int[] { 0 });
    }
    else
    {
       logger.debug("RGB image case: [1 2 3]");
       resizedImage = JAI.create("bandselect",
       resizedImage, new int[] {0, 1, 2});
    }
    */

    // Cut image if necessary
    if (can_cut == true) {
        resizedImage = ProcessingUtils.cutQuickLook(resizedImage, 2.0, 2);
        logger.debug("Image resized and cutted in band : " + resizedImage.getWidth() + "x"
                + resizedImage.getHeight());

    }

    // Computes ratio and scale
    float scale = 1;
    if (resizedImage.getWidth() >= resizedImage.getHeight()) {
        scale = (float) ((double) width / (double) resizedImage.getWidth());
    } else {
        scale = (float) ((double) height / (double) resizedImage.getHeight());
    }

    // Processing resize process
    ParameterBlock pb = new ParameterBlock();
    // The source image
    pb.addSource(resizedImage);
    // The xScale
    pb.add(scale);
    // The yScale
    pb.add(scale);
    // The x translation
    pb.add(0.0F);
    // The y translation
    pb.add(0.0F);
    // The interpolation
    pb.add(Interpolation.getInstance(Interpolation.INTERP_BICUBIC));
    resizedImage = JAI.create("scale", pb, null);

    logger.debug("Image resized to : " + resizedImage.getWidth() + "x" + resizedImage.getHeight());

    if ((width != resizedImage.getWidth()) && (height != resizedImage.getHeight())) {
        logger.debug("Final resize to complete expected image output");
        resizedImage = ResizeImage(resizedImage, width, height, 0, false);
    } else {
        pb = new ParameterBlock().addSource(resizedImage);
        pb.add(new float[] { 0.002f }); // normalize factor 0.02%
        pb.add(null); // visible region
        pb.add(4); // x period
        pb.add(4); // y period
        resizedImage = JAI.create("normalize", pb);

        /* Does not work because of color model issue
        resizedImage = ColorQuantizerDescriptor.create(
              resizedImage, ColorQuantizerDescriptor.OCTTREE,
              new Integer(255), new Integer(300), null, new Integer(4),
              new Integer(4), null);
        */
    }
    return resizedImage;
}

From source file:imageLines.ImageHelpers.java

/**Binarize a planar image. Only used internally.*/
private static BufferedImage binarize(int threshold, PlanarImage image) {
    // Binarizes the original image.
    if (threshold > 5)
        threshold -= 3;/*from  w w  w  .  j a v  a2 s  .c om*/
    ParameterBlock pb = new ParameterBlock();
    pb.addSource(image);
    pb.add(1.0 * threshold);
    // Creates a new, thresholded image and uses it on the DisplayJAI component
    PlanarImage thresholdedImage = JAI.create("binarize", pb);
    return thresholdedImage.getAsBufferedImage();
}

From source file:imageLines.ImageHelpers.java

/**Perform a binary thresholding on the image using 1 of 5 methods
 0-IterativeThreshold//from   w  w w .ja  v a 2s.  c om
 1-MaxEntropyThreshold
 2-Maximum Variance
3-Minimum Error
 4-Minimum Fuzziness
 */
public static BufferedImage binaryThreshold(BufferedImage img, int method) {
    PlanarImage j = PlanarImage.wrapRenderedImage(img); //JAI.create("fileload", imageFile.getPath());
    //double[][] matrix = {{ 0.114, 0.587, 0.299, 0 }};
    double[][] matrix = { { 0.114, 0.587, 0.299, 0 } };
    ParameterBlock pb = new ParameterBlock();
    pb.addSource(j);
    pb.add(matrix);
    try {
        j = JAI.create("bandcombine", pb);
    } catch (IllegalArgumentException e) {

    }
    pb = new ParameterBlock();
    pb.addSource(j);
    pb.add(null); // The ROI
    pb.add(1);
    pb.add(1);
    pb.add(new int[] { 256 });
    pb.add(new double[] { 0 });
    pb.add(new double[] { 256 });
    // Calculate the histogram of the image.
    PlanarImage dummyImage = JAI.create("histogram", pb);
    Histogram h = (Histogram) dummyImage.getProperty("histogram");
    // Calculate the thresholds based on the selected method.
    double[] thresholds = null;

    switch (method) {
    case 0: // Iterative Bisection
        thresholds = h.getIterativeThreshold();
        break;
    case 1: // Maximum Entropy
        thresholds = h.getMaxEntropyThreshold();
        break;
    case 2: // Maximum Variance
        thresholds = h.getMaxVarianceThreshold();
        break;
    case 3: // Minimum Error
        thresholds = h.getMinErrorThreshold();
        break;
    case 4: // Minimum Fuzziness
        thresholds = h.getMinFuzzinessThreshold();
        break;

    }
    int threshold = (int) thresholds[0];
    BufferedImage bin = (binarize(threshold, j));
    return bin;
}

From source file:fr.gael.dhus.datastore.processing.ProcessingUtils.java

public static RenderedImage resizeImage(RenderedImage image, int width, int height, float max_ratio,
        boolean can_cut) {
    RenderedImage resizedImage = image;

    /*/*from  ww w.  j a  v a2s  . co  m*/
    // Select the displayable bands
    if (resizedImage.getNumBands () <= 2)
    {
       logger.debug("Grayscale image case");
       resizedImage = JAI.create("bandselect",
       resizedImage, new int[] { 0 });
    }
    else
    {
       logger.debug("RGB image case: [1 2 3]");
       resizedImage = JAI.create("bandselect",
       resizedImage, new int[] {0, 1, 2});
    }
    */

    // Cut image if necessary
    if (can_cut == true) {
        resizedImage = ProcessingUtils.cutQuickLook(resizedImage, 2.0, 2);
        logger.debug("Image resized and cutted in band : " + resizedImage.getWidth() + "x"
                + resizedImage.getHeight());

    }

    // Computes ratio and scale
    float scale = 1;
    if (resizedImage.getWidth() >= resizedImage.getHeight()) {
        scale = (float) ((double) width / (double) resizedImage.getWidth());
    } else {
        scale = (float) ((double) height / (double) resizedImage.getHeight());
    }

    // Processing resize process
    ParameterBlock pb = new ParameterBlock();
    // The source image
    pb.addSource(resizedImage);
    // The xScale
    pb.add(scale);
    // The yScale
    pb.add(scale);
    // The x translation
    pb.add(0.0F);
    // The y translation
    pb.add(0.0F);
    // The interpolation
    pb.add(Interpolation.getInstance(Interpolation.INTERP_BICUBIC));
    resizedImage = JAI.create("scale", pb, null);

    logger.debug("Image resized to : " + resizedImage.getWidth() + "x" + resizedImage.getHeight());

    if ((width != resizedImage.getWidth()) && (height != resizedImage.getHeight())) {
        logger.debug("Final resize to complete expected image output");
        resizedImage = resizeImage(resizedImage, width, height, 0, false);
    } else {
        pb = new ParameterBlock().addSource(resizedImage);
        pb.add(new float[] { 0.002f }); // normalize factor 0.02%
        pb.add(null); // visible region
        pb.add(4); // x period
        pb.add(4); // y period
        resizedImage = JAI.create("normalize", pb);

        /* Does not work because of color model issue
        resizedImage = ColorQuantizerDescriptor.create(
              resizedImage, ColorQuantizerDescriptor.OCTTREE,
              new Integer(255), new Integer(300), null, new Integer(4),
              new Integer(4), null);
        */
    }
    return resizedImage;
}

From source file:net.daimonin.client3d.editor.main.Editor3D.java

/**
* Builds a single PNG out of all ImageSetImages, considering their calculated
* coordinates.//from  w w w.  j a v a2 s  . co  m
* 
* @param fileNameImageSet Name of resulting PNG.
* @param dimension [width, height] of the resulting PNG. where 0 is maximum
*          compression, 1 is no compression at all.
* @throws IOException IOException.
*/
private static void writeImageSet(final String fileNameImageSet, final int[] dimension) throws IOException {

    BufferedImage bigImg = new BufferedImage(dimension[0], dimension[1], BufferedImage.TYPE_INT_ARGB);
    Graphics2D big = bigImg.createGraphics();
    for (int i = 0; i < images.size(); i++) {
        if (images.get(i).getBorderSize() > 0) {
            ParameterBlock params = new ParameterBlock();
            params.addSource(images.get(i).getImage());
            params.add(images.get(i).getBorderSize()); // left pad
            params.add(images.get(i).getBorderSize()); // right pad
            params.add(images.get(i).getBorderSize()); // top pad
            params.add(images.get(i).getBorderSize()); // bottom pad
            params.add(new BorderExtenderConstant(new double[] { images.get(i).getBorderColor().getRed(),
                    images.get(i).getBorderColor().getGreen(), images.get(i).getBorderColor().getBlue(),
                    BORDERCOLORMAX }));

            big.drawImage(JAI.create("border", params).getAsBufferedImage(), images.get(i).getPosX(),
                    images.get(i).getPosY(), null);

        } else {
            big.drawImage(images.get(i).getImage(), images.get(i).getPosX(), images.get(i).getPosY(), null);
        }
    }

    big.dispose();
    ImageIO.write(bigImg, "png", new File(fileNameImageSet));
    printInfo(System.getProperty("user.dir") + "/" + imageset + " created");
}

From source file:net.filterlogic.util.imaging.ToTIFF.java

/**
* convert rgb image to grayscale// w  w w.  jav a  2  s .c  o m
*
* typical weights for converting RGB to Grayscale
* gray = 0.3*red + 0.59*green + 0.11*blue
*/
public static synchronized RenderedOp convertRGBToGrayscaleImage(RenderedImage ri) {
    double[][] matrix = { { 0.3D, 0.59D, 0.11D, 0D } };
    ParameterBlock pb = new ParameterBlock();
    pb.addSource(ri);
    pb.add(matrix);
    return JAI.create("BandCombine", pb, null);
}

From source file:omr.jai.RGBToBilevel.java

RGBToBilevel(final String fileName, boolean isErrorDiffusion) {

    // Load the file.
    PlanarImage src = JAI.create("fileload", fileName);

    // Load the ParameterBlock for the dithering operation
    // and set the operation name.
    ParameterBlock pb = new ParameterBlock();
    pb.addSource(src);
    String opName = null;//  w w w. ja  va2  s  .  c  o m
    if (isErrorDiffusion) {
        opName = "errordiffusion";
        LookupTableJAI lut = new LookupTableJAI(new byte[][] { { (byte) 0x00, (byte) 0xff },
                { (byte) 0x00, (byte) 0xff }, { (byte) 0x00, (byte) 0xff } });
        pb.add(lut);
        pb.add(KernelJAI.ERROR_FILTER_FLOYD_STEINBERG);
    } else {
        opName = "ordereddither";
        ColorCube cube = ColorCube.createColorCube(DataBuffer.TYPE_BYTE, 0, new int[] { 2, 2, 2 });
        pb.add(cube);
        pb.add(KernelJAI.DITHER_MASK_443);
    }

    // Create a layout containing an IndexColorModel which maps
    // zero to zero and unity to 255; force SampleModel to be bilevel.
    ImageLayout layout = new ImageLayout();
    byte[] map = new byte[] { (byte) 0x00, (byte) 0xff };
    ColorModel cm = new IndexColorModel(1, 2, map, map, map);
    layout.setColorModel(cm);
    SampleModel sm = new MultiPixelPackedSampleModel(DataBuffer.TYPE_BYTE, src.getWidth(), src.getHeight(), 1);
    layout.setSampleModel(sm);

    // Create a hint containing the layout.
    RenderingHints hints = new RenderingHints(JAI.KEY_IMAGE_LAYOUT, layout);

    // Dither the image.
    final PlanarImage dst = JAI.create(opName, pb, hints);

    // Exit on window closing.
    addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent we) {
            JAI.create("filestore", dst, fileName + ".out", "PNG", null);
            System.exit(0);
        }
    });

    // Display the result.
    //// ATTENTION A REMPLACER : add(new ScrollingImagePanel(dst, dst.getWidth(), dst.getHeight()));
    pack();
    setVisible(true);
}

From source file:com.alibaba.simpleimage.ScaleTest.java

public PlanarImage doSubsampleAverage(PlanarImage op) throws Exception {
    double zoom = dScale;
    ParameterBlock pb = new ParameterBlock();
    pb.addSource(op);
    pb.add(zoom);//  www. ja  v a  2s  .c o m
    pb.add(zoom);

    RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_RENDERING,
            RenderingHints.VALUE_RENDER_QUALITY);
    RenderedOp zoomOp = JAI.create("SubsampleAverage", pb, qualityHints);

    return zoomOp;
}

From source file:com.alibaba.simpleimage.ScaleTest.java

public PlanarImage doScaleNearest(PlanarImage op) throws Exception {
    ParameterBlock pb = new ParameterBlock();
    pb.addSource(op);
    pb.add(scale);/*  w  w  w . j  ava2 s .  com*/
    pb.add(scale);
    pb.add(0.0F);
    pb.add(0.0F);
    pb.add(Interpolation.getInstance(Interpolation.INTERP_NEAREST));
    RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_RENDERING,
            RenderingHints.VALUE_RENDER_QUALITY);
    op = JAI.create("scale", pb, qualityHints);

    return op;
}

From source file:com.alibaba.simpleimage.ScaleTest.java

public PlanarImage doScaleBilinear(PlanarImage op) throws Exception {
    ParameterBlock pb = new ParameterBlock();
    pb.addSource(op);
    pb.add(scale);/*from   w  ww.j  ava2 s . co  m*/
    pb.add(scale);
    pb.add(0.0F);
    pb.add(0.0F);
    pb.add(Interpolation.getInstance(Interpolation.INTERP_BILINEAR));
    RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_RENDERING,
            RenderingHints.VALUE_RENDER_QUALITY);
    op = JAI.create("scale", pb, qualityHints);

    return op;
}