这是我在蓝杰做的第一个项目:PC端美颜相机。这个小程序的本质就是对一张图像做处理。存储在计算机的图像信息实际上是一个个像素点,不同的像素点有不同的rgb值,修改像素点的rgb值我们就可以将图像处理成我们想要的效果。

首先我们需要创建一个图形界面作为我们美颜相机的程序界面,来显示图片和功能按钮。这里就需要用到Swing组件里的JFrame,JPanel,JButton等类.这是整个软件UI界面的代码:

   public class Ui {public static void main(String[] args) {Ui ui=new Ui();ui.showui();}public void showui() {//图像处理界面JFrame jf = new JFrame();jf.setSize(700, 800);jf.setTitle("图像处理");jf.setLocationRelativeTo(null);jf.setDefaultCloseOperation(3);//FlowLayout flow =new FlowLayout();//jf.setLayout(flow);JPanel jp_1 = new JPanel(); jp_1.setBackground(Color.DARK_GRAY); Dimension dim = new Dimension(120,0); jp_1.setPreferredSize(dim);Dimension btndim = new Dimension(110,35);PixelMouse mouse = new PixelMouse();String[] butt={"原图","马赛克","灰度","二值化","轮廓检测","手 绘风格" ,"镜像","锐化","撤回"};//给窗体添加鼠标监听器方法for(int i=0;i<butt.length;i++) {JButton dd=new JButton(butt[i]);dd.setPreferredSize(btndim);}// 绘图区 Drawpanel panelDraw = new Drawpanel(); panelDraw.setBackground(Color.BLACK); jf.add(jp_1,BorderLayout.EAST); jf.add(panelDraw,BorderLayout.CENTER);jf.setVisible(true);//jp_2.addMouseMotionListener(mouse); //jp_2.addKeyListener(mouse);//从jp2获取画笔//获取画笔Graphics gr = panelDraw.getGraphics();mouse.setj(panelDraw);panelDraw.addMouseListener(mouse); panelDraw.addMouseMotionListener(mouse); }
}

我们这里设计了几个功能按钮:"原图","马赛克","灰度","二值化","轮廓检测","手 绘风格" ,"镜像","锐化","撤回"。为这几个按钮添加动作监听器才能获得想要的效果。动作监听器的实现是继承抽象类然后重写抽象方法实现的。点击原图时我们要显示预先选定的图片,在这个过程中,我们要先使用IO流读取图片并存储到缓冲图片中,然后创建二维数组并把像素点的rgb值存储到二维数组中。

通过下面这个方法我们可以获得存储图像信息的二维数组。

 public int[][] GetImagepixel(String path){File file=new File(path);BufferedImage buffImage = null; try {buffImage = ImageIO.read(file);} catch (IOException c) {c.printStackTrace();}int w=buffImage.getWidth();int h=buffImage.getHeight();int[][] arrpixel = new int[w][h];for(int i=0;i<w;i++) {for(int j=0;j<h;j++) {arrpixel[i][j]=buffImage.getRGB(i, j);}}//System.out.println("arrr");return arrpixel;}

接下来判断触发动作监听器的是哪个按钮,这一步可以借助e.getActionCommand()实现,这里要注意,e.getActionCommand()会返回按钮上的字符串,而e.getSource返回的是按钮JButton对象.在比较返回的字符串时不可以用==判断,要用e.equals,因为==比较的是两个字符串的内存地址,而不是字符串的内容。

if("原图".equals(e.getActionCommand())) {System.out.println("原图");for(int i=0;i<arrPixel.length;i++){for(int j=0;j<arrPixel[i].length;j++){int pixel = arrPixel[i][j];//Color color = new Color(pixel);//设置画笔为当前颜色buffing.setRGB(i, j,pixel);//g.setColor(color);//画像素点}}

这样就实现了一个按钮监听器,其余的按钮监听器的功能可以照此实现。这里有个小技巧,就是画图时如果是将二维数组直接画在画布上会有一个刷新的过程,我们可以先画在缓冲图像BufferedImage上,然后再使用Graphics类的drawImage方法把缓冲图像画在画布上。画笔需要从UI界面先获取再传送到动作监听器中,获取画笔对象的代码要在setvisible代码下方,不然会出现空指针异常。

JAVA PC端美颜相机相关推荐

  1. 【JAVA】简易美颜相机

    简易美颜相机 简易美颜相机,是我最初接触JAVA的小项目,通过这个项目,我初步学会了许多JAVA的基础知识,下面就让我们开始吧! 首先让我们理清整个项目的大概逻辑: 1.一张图片和摄像头的显示以及各种 ...

  2. Java PC端微信、支付宝扫码支付(二)

    Java PC端微信.支付宝扫码支付(二) 前几天写了微信支付,附上链接 https://blog.csdn.net/qq_43494610/article/details/90411391 ,今天抽 ...

  3. JAVA PC端扫码支付(一)微信支付

    微信支付从配置到开发 一.配置 1.开通公众平台支付功能 商户号 微信支付功能先要申请微信(企业)公众平台,然后开通企业公众平台付功能.下图为微信(企业)公众平台页面,可以看到商户号等信息 微信公众号 ...

  4. java pc端软件抓包,如何通过抓包工具fiddler获取java程序的http请求

    抓包工具fidder是一个很轻巧的可以获取浏览器,程序的http,https请求的软件. 百科地址:http://baike.baidu.com/view/868685.htm 官网地址:http:/ ...

  5. JAVA美颜相机入门(兼具图像处理和画图板功能)

    美颜相机已经成为当代年轻人不可或缺的自拍神器,其具有自动美肌,完美保留细节,让照片告别模糊等功能.或许我们会觉得编写这样一个具有如此强大功能的美颜相机一定需要庞大而且复杂的代码段,其实不然,即使对于初 ...

  6. Java美颜相机入门(图像处理实现各种滤镜算法)

    一.思路分析 一款简易美颜相机的功能我们可以简单分为两大块:1.图像处理    2.功能区 最终的效果图如下: 二.代码分析 图像处理工具的本质是处理像素点,而像素点的本质就是一种颜色,每一个像素点都 ...

  7. 【项目:实现美颜相机——java】

    我们可以用java代码实现美颜相机的功能. 类似于之前的图片处理效果: [java用监听器实现选择处理图片的效果]_ZERO_HOPE的博客-CSDN博客 摄像头抓取的图片一帧一帧地绘制在界面上,得到 ...

  8. 小浩浅谈之Java美颜相机pc端(视频)

    在之前的文章中,给大家介绍了如果使用WebCamp来使用电脑的摄像头以及如何为图片添加各种滤镜,那么在这我们进行一个相互结合,就构成了一个我们pc端的美颜相机. 1.第一步和之前一样,就是框体 的创建 ...

  9. Java SpringMVC实现PC端网页微信扫码支付完整版

    一:前期微信支付扫盲知识 前提条件是已经有申请了微信支付功能的公众号,然后我们需要得到公众号APPID和微信商户号,这个分别在微信公众号和微信支付商家平台上面可以发现.其实在你申请成功支付功能之后,微 ...

最新文章

  1. 进阶学习(3.13) Proxy Pattern 代理模式
  2. 19、HTML5 新的 Input 类型
  3. HTML DOM教程 22-HTML DOM Form 对象
  4. 10-7 3-2-(b)查询由生产厂商B生产的所有产品的型号(model) 和价格(price) (10 分)
  5. 【qduoj - 312】寻找唯一的萌妹(卡时)
  6. 复制表、复制表结构、复制数据
  7. [转载] Java 语言中的实例初始化块 ( IIB) 详解
  8. php array_key_exists() 与 isset() 的区别
  9. 01-SpringMVC 原理
  10. 4412 学习目录总结
  11. WordPress数据库error establishing a database connection错误
  12. Jason与Xml的解析过程
  13. RecyclerView实现京东分类联动效果
  14. 路由追踪测试软件,路由追踪命令是什么 使用路由追踪的技巧
  15. PLM Agile BOM表结构笔记
  16. 微信ANDROID版本解析包错误,终于弄明白为什么手机安装软件会出现“解析包出现问题”...
  17. 【转载】com.mysql.jdbc.Driver 与 org.gjt.mm.mysql.Driver的区别
  18. Excel VBA 多条件筛选及汇总统计
  19. AI+MR遇冷后回暖,国内公司抢先卡位仍有风险待解
  20. 《​社会很单纯,复杂的是人-雾满拦江》

热门文章

  1. 2020三大运营商合并成一家_移动、联通、电信三大运营商未来会合并成一家吗?...
  2. 【科研工具】审稿人第一眼只看配图?
  3. 阿里云发布智能账单功能,让你免费拥有专属的“云产品 消费账单管家”
  4. python学习----网页图片文字识别(简单)
  5. scipy中abnormal termination in LNSRCH
  6. .NET转JAVA曲折之路
  7. C语言打印输出星号三角形案例讲解
  8. iphone外屏碎了多少钱_苹果告诉你:不小心把 iPhone X 摔裂屏,要修多少钱?
  9. unity如何制作随机生成器
  10. Web 文本挖掘(TextMining)技术