/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package webcamstudio.sources.effects; import Catalano.Imaging.FastBitmap; import static java.awt.AlphaComposite.SRC_OVER; import static java.awt.AlphaComposite.getInstance; import java.awt.Graphics2D; import static java.awt.RenderingHints.KEY_ANTIALIASING; import static java.awt.RenderingHints.KEY_COLOR_RENDERING; import static java.awt.RenderingHints.KEY_DITHERING; import static java.awt.RenderingHints.KEY_FRACTIONALMETRICS; import static java.awt.RenderingHints.KEY_INTERPOLATION; import static java.awt.RenderingHints.KEY_RENDERING; import static java.awt.RenderingHints.KEY_TEXT_ANTIALIASING; import static java.awt.RenderingHints.VALUE_ANTIALIAS_OFF; import static java.awt.RenderingHints.VALUE_COLOR_RENDER_SPEED; import static java.awt.RenderingHints.VALUE_DITHER_DISABLE; import static java.awt.RenderingHints.VALUE_FRACTIONALMETRICS_OFF; import static java.awt.RenderingHints.VALUE_INTERPOLATION_BILINEAR; import static java.awt.RenderingHints.VALUE_RENDER_SPEED; import static java.awt.RenderingHints.VALUE_TEXT_ANTIALIAS_OFF; import java.awt.image.BufferedImage; import java.util.ArrayList; import javax.swing.JPanel; /** * * @author karl */ public class Ghosting extends Effect { private final ArrayList<FastBitmap> previusImagesIn = new ArrayList<>(); private int imageCount = 0; FastBitmap previusImageIn; @Override public void applyEffect(BufferedImage img) { FastBitmap imageIn = new FastBitmap(img); imageIn.toRGB(); previusImagesIn.add(imageIn); if (imageCount > 8){ previusImageIn = previusImagesIn.get(1); previusImagesIn.remove(0); } else { previusImageIn = imageIn; } BufferedImage temp = previusImageIn.toBufferedImage(); Graphics2D buffer = img.createGraphics(); buffer.setRenderingHint(KEY_INTERPOLATION, VALUE_INTERPOLATION_BILINEAR); buffer.setRenderingHint(KEY_RENDERING, VALUE_RENDER_SPEED); buffer.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_OFF); buffer.setRenderingHint(KEY_TEXT_ANTIALIASING, VALUE_TEXT_ANTIALIAS_OFF); buffer.setRenderingHint(KEY_FRACTIONALMETRICS, VALUE_FRACTIONALMETRICS_OFF); buffer.setRenderingHint(KEY_COLOR_RENDERING, VALUE_COLOR_RENDER_SPEED); buffer.setRenderingHint(KEY_DITHERING, VALUE_DITHER_DISABLE); buffer.setComposite(getInstance(SRC_OVER, 30 / 100F)); // buffer.drawImage(temp, 0, 0,img.getWidth(),img.getHeight(),0,0,temp.getWidth(),temp.getHeight(),null); buffer.drawImage(temp, 0, 0, null); buffer.dispose(); imageCount ++ ; } @Override public boolean needApply(){ return needApply=true; } @Override public JPanel getControl() { JPanel dummy = new JPanel(); return dummy; } @Override public void resetFX() { // nothing here. } }