/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package webcamstudio.streams; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import org.imgscalr.Scalr; import webcamstudio.mixers.Frame; import webcamstudio.mixers.MasterFrameBuilder; import webcamstudio.mixers.MasterMixer; import webcamstudio.mixers.PreviewFrameBuilder; import webcamstudio.sources.effects.Effect; /** * * @author patrick */ public class SourceImage extends Stream{ BufferedImage image = null; boolean isPlaying = false; Frame frame = null; private final MasterMixer mixer = MasterMixer.getInstance(); private int imgCW = mixer.getWidth(); private int imgCH = mixer.getHeight(); public SourceImage(File img){ super(); file = img; name = img.getName(); } private void loadImage(File f) throws IOException{ BufferedImage capImg = ImageIO.read(f); image = Scalr.resize(capImg, Scalr.Method.BALANCED, Scalr.Mode.FIT_EXACT, width, height); captureWidth = image.getWidth(); captureHeight = image.getHeight(); } @Override public void read() { isPlaying = true; try{ loadImage(file); frame = new Frame(captureWidth,captureHeight,rate); frame.setImage(image); frame.setAudio(null); frame.setID(uuid); frame.setOutputFormat(x, y, width, height, opacity, volume); frame.setZOrder(zorder); if (getPreView()){ PreviewFrameBuilder.register(this); } else { MasterFrameBuilder.register(this); } } catch(IOException e){ e.printStackTrace(); } } @Override public void pause() { // do nothing. } @Override public void stop() { for (int fx = 0; fx < this.getEffects().size(); fx++) { Effect fxT = this.getEffects().get(fx); if (fxT.getName().endsWith("Stretch") || fxT.getName().endsWith("Crop")) { // do nothing. } else { fxT.resetFX(); } } isPlaying = false; frame = null; if (getPreView()){ PreviewFrameBuilder.unregister(this); } else { MasterFrameBuilder.unregister(this); } } @Override public boolean needSeek() { return needSeekCTRL=false; } @Override public Frame getFrame(){ return nextFrame; } @Override public boolean isPlaying() { return isPlaying; } @Override public void setIsPlaying(boolean setIsPlaying) { isPlaying = setIsPlaying; } @Override public BufferedImage getPreview() { return image; } @Override public boolean hasAudio() { return false; } @Override public boolean hasVideo() { return true; } /** * */ @Override public void readNext() { frame.setImage(image); // if (frame != null) { if (isPlaying) { BufferedImage img = frame.getImage(); applyEffects(img); // } // if (frame != null) { frame.setOutputFormat(x, y, width, height, opacity, volume); frame.setZOrder(zorder); } nextFrame=frame; } @Override public void updatePNG() { // System.out.println("updatePNG !!!"); captureWidth = width; captureHeight = height; try{ loadImage(file); frame = new Frame(captureWidth,captureHeight,rate); frame.setImage(image); frame.setAudio(null); frame.setID(uuid); frame.setOutputFormat(x, y, width, height, opacity, volume); frame.setZOrder(zorder); } catch(IOException e){ e.printStackTrace(); } } public void setImgCW (int tCW) { imgCW = tCW; } public int getImgCW(){ return imgCW; } public void setImgCH(int tCH) { imgCH = tCH; } public int getImgCH(){ return imgCH; } @Override public void setWidth(int w) { if (w < 1){ w = 1; } width = w; updatePNG(); // System.out.println("W set ... "+w); } @Override public void setHeight(int h) { if (h < 1){ h = 1; } height = h; updatePNG(); // System.out.println("Set " + this.getName() + " To = " + this.height); // System.out.println("H set ... "+h); } @Override public void play() { // nothing here. } }