JAVA PC端美颜相机

news/2024/10/31 1:34:23/

这是我在蓝杰做的第一个项目: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代码下方,不然会出现空指针异常。


http://www.ppmy.cn/news/437096.html

相关文章

美颜相机-磨皮实现

主要参考了《使用OPENCV简单实现具有肤质保留功能的磨皮增白算法》这篇文章&#xff0c;我使用了python实现&#xff0c;最主要的是直接按原文公式算的话&#xff0c;我这里一直有个问题就是原图中纯色的地方处理后会出现色彩斑点而且非常严重&#xff0c;不知道原作者是否有这…

美颜相机毕设项目零基础教学

美颜相机开发手册 1.数字化图像底层原理 2.文件读取图片&#xff0c;操作图片矩阵 3.图像滤镜算法实现 4.项目结构设计 5.图像存储&#xff0c;附加功能实现&#xff08;画笔/P图/贴纸…&#xff09; 6.卷积图像处理算法实现 7.图像识别原理 8.二维码的生成与识别 9.以…

美颜相机的基本功能实现

美颜相机的基本功能实现 基本知识 在学习了在标准绘制图形库中进行简单的递归图像实现后&#xff0c;我们把目光聚焦到了对于复杂图片文件的处理上&#xff0c;在这里需要简单介绍一下关于图像色彩的知识&#xff0c;以及缓存图片类的介绍。 图形色彩参数“ARGB” 在一个复…

linux 相机软件,镜像相机app

镜像相机app带给用户更多特别的拍摄滤镜和效果&#xff0c;这里提供了两种拍摄方式&#xff0c;一种是普通的拍摄效果&#xff0c;还有一种拍摄出来的是左右镜面对称的效果&#xff0c;并且镜像相机app中随时可以进行图片编辑和美化功能&#xff0c;强大的修图和丰富的滤镜贴纸…

补充 | 美颜相机卡顿trace分析

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、美颜相机录制视频 trace 分析概览二、Camera FWK 与 camera HAL 录像交互三、美颜相机app 与SurfaceFlinger 交互四、美颜相机卡顿丢帧trace 分析 …

Java程序结构模板——美颜相机案例

我们以美颜相机举例&#xff0c;分析一个程序都需要什么。 1、UI界面&#xff1a;大部分需要交互的程序都需要UI界面来实现交流互动。 2、监听器&#xff1a;人们在UI中的操作需要监听器来捕捉和执行相应的命令。 3、工具类&#xff1a;将执行命令的方法单独封装成工具类&#…

P8美颜相机的实现

美颜相机 一. 基础知识二. 图片处理将一个图片转化为一个二维数组并封装 三.写一个界面并添加画板和按钮四. 添加监听器并将图片信息传递给监听器中五.马赛克六.灰度七.素描美白油画轮廓检测 一. 基础知识 一幅图就是无数个像素点组成&#xff0c;可以看成宽w高h的二维数组图像…

大疆口袋相机美颜怎么设置_大疆(DJI)Pocket2 | 深度测评口袋相机:超多配件随心搭,自带美颜的拍摄助手!-极果...

写在前面 你真的需要一台DJI Pocket 2吗?嘿,大家好~我是抖音博主无情剪辑狗,作为一名摄影教学类博主很高兴能体验到DJI Pocket 2,经过自己一个星期的体验,来和大家分享一下这款产品我的心得体会以及什么样的人适合入手这样一台设备。 下面通过这则视频可以先简单的了解一…