用Java实现相机滤镜功能(一)

       今天我们来用java实现相机滤镜功能。显然首先要有一个窗体,所以我们创建类来设置窗体,类名取为VideoCapture,这里我们简写一下,让VideoCapture类继承JFrame,作为它的子类,然后可以不再用JFrame创建窗体对象,而是可以直接再方法中进行窗体属性的设置,代码为public class VideoCapture extends JFrame{...}.接着撰写方法initUI,设置标题为“VideoCapture”,设置大小,居中显示,选择关闭方式,选择边框布局方式。代码为setTitle(“VideoCapture”);setSize(1000,800);setLocationRelativeTo(null);setDefaultCloseOperation(3);BorderLayout border = new BorderLayout();setLayout(border)。该部分代码如下     

       然后我们加入两个JPanel面板容器,首先创建JPanel新对象jp用来保存按钮,代码为JPanel jp=new JPanel();jp.setPreferredSize(new Dimension(100,80));add(jp,Border.SOUTH);

然后再创建一个JPanel对象jpd,把它加在边框布局的中间,并设置颜色背景为灰色,代码为JPanel jpd=new JPanel();jpd.setPreferredSize(new Dimension(1000,600));jpd. setBackground(Color.GRAY);add(jpd,Border.CENTER)。

       因为接下来的按钮要用到动作监听器,所以我们要创建监听器对象类VClistener来继承接口Actionlistener,然后要设置一下画笔属性,同时设置方法,代码为private Graphics gr;public void setG(Graphics gr){ this.gr = gr  }。然后重写actionPerformed方法。稍后逐渐添加方法内容。创建该监听器类对象vcl,代码为VClistener vcl = new VClistener() ; 

       接着设计按钮,我们打算加的按钮有启动,关闭,拍照,二值化,灰度图,马赛克,原图。前三个按钮为相机操作,后四个按钮为图像操作。这里我们把这两类按钮区分,通过加以不同的动作指令来对其进行分类,用setActionCommand()方法来区分二者的动作指令,这里看一下getActionCommand的方法体,如下图所示,首先是返回字符串ac,如果ac值为空值,那么就返回按钮的文本内容,否则就返回非空ac值,这里的ac就是指的actionCommand值。所以把这两类按钮的该值进行提前区分设置。举例:jbu.setActionCommand("camOP")。

然后我们开始写代码加入按钮。首先创建字符串数组,把我们想要加入的按钮名称写在里面,代码为String str = {"启动","关闭","拍照"}。然后循环遍历,把这些按钮设置大小,加上监听器,并放到面板jp上,代码为for(int i=0;i<str.length;i++){,JButton jbu = new JButton(str[i]);jbu.setActionCommand("camOP");jbu.setPreferredSize(new Dimension(80,40));jbu.addActionlistener(vcl);jp.add(jbu);},接着我们把图像滤镜的按钮也加在里面,这里使用增强for循环,代码为String filterstr = {"二值化","灰度图","马赛克","原图"};for(String:fstr;filterstr){JButton jbu = new JButton(fstr);jbu.setPreferredSize(80,40);jbu.setActionCommand("videoOP");jbu.addActionlistener(vcl);jp.add(jbu);}。至此就加入了所有的需要的按钮。

       然后不要忘记设置可见,代码为setVisible(true);然后在我们监听按钮时,势必要发生一些后续的动作,我们希望的动作都是写在了监听器类中的actionPerformed方法中,这里监听器中对象要用到画笔,并且也定义了画笔属性,所以在这里我们要把画板的画笔传给监听器对象,作为该对象的画笔属性。代码为this.g =jpd.getGraphics();vcl.setG(g);这样的话监听器对象就有了画笔属性。

     然后我们要得到一个摄像头,首先这里要下载三个libs并且导入项目,如图所示。

  

然后直接使用Webcam类调用getDefault()可以获取电脑默认的摄像头, 代码为 Webcam webcam=Webcam.getDefault();因为getDefault()有static修饰符, 所以可以直接通过类名Webcam来调用。这里拓展一下,我们通过Webcam类的getWebcams方法可以获得电脑中所有能用的摄像头,方法返回值类型是List,且列表中元素类型为Webcam,即摄像头,可以得到它,并且遍历输出一下,代码为List<Webcam> webcamlist=Webcam.getWebcams();System.out.println("摄像头的总数为"+webcamlist.size());for(Webcam wecam1:webcamlist){System.out.println("name:"+webcam1);},这样就依次输出了所有的摄像头。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值