IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> JAVA PC端美颜相机 -> 正文阅读

[人工智能]JAVA PC端美颜相机

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

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-13 11:27:11  更:2021-10-13 11:27:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 10:37:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码