录制你的动态美——Java的视频滤镜

众所周知视频是不能P的,所以一旦学会了视频滤镜,你就是最靓的仔!

创建一个滤镜类;

其实具体思路与之前的图片滤镜极为相似,故我直接将代码贴出来。

public BufferedImage grayimage(Graphics g,BufferedImage image){
    int width=image.getWidth();
    int height= image.getHeight();
    for(int i=0;i<width;i++){
        for(int j=0;j<height;j++){
             rgb=image.getRGB(i,j);
             depart(rgb);
             gray=(int)(0.3*r+0.59*ge+0.11*b);
             addall(gray,gray,gray);
             image.setRGB(i,j,rgb);
        }
    }
    return image;
}//灰化滤镜

这其中值得注意的有,setRGB的方法可以帮助我得到我们想要效果的图片。

同时注意返回值,以便后续的使用。

至于像马赛克效果比较特殊,要新创图片再用缓存图片的画笔绘制 ;

 public BufferedImage masiimage(Graphics g,BufferedImage image){
        int width=image.getWidth();
        int height=image.getHeight();
        BufferedImage newImage = new BufferedImage (width, height, BufferedImage.TYPE_INT_RGB);
        Graphics bf= newImage.getGraphics();
        for(int i=0;i<width;i+=5) {
            for (int j = 0; j < height; j += 5) {
                rgb = image.getRGB(i, j);
                Color cl = new Color(rgb);
                bf.setColor(cl);
                bf.fillRect( i, j, 5, 5);
            }
        }
        return newImage;
    }//马赛克滤镜

完成这些后,我们用switch,完善一下多线程中的run方法,和修改一下监听器的逻辑;

同时利用JPanel将我们的界面变得更加美观:

public void ui() {
        JFrame jf=new JFrame();
        jf.setTitle("VIDEO");
        jf.setSize(2000,2000);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//建立窗口

        this.setBackground(Color.LIGHT_GRAY);
        JPanel btnpnl=new JPanel();
        btnpnl.setBackground(Color.white);
        Dimension dim=new Dimension(300,200);
        btnpnl.setPreferredSize(dim);
        btnUI(btnname,btnpnl);

        jf.add(this,BorderLayout.CENTER);
        jf.add(btnpnl,BorderLayout.WEST);

        jf.setLocationRelativeTo(null);
        jf.setVisible(true);
        Graphics g=this.getGraphics();
        ll.setGraphics(g);
    }

最后成果如下:

当然使用完多线程后,要记得让run方法结束 

猜你喜欢

转载自blog.csdn.net/AkinanCZ/article/details/125880377