美颜相机(java当中多种滤镜效果的实现) 您所在的位置:网站首页 直播的美颜效果和美颜相机的效果哪个厉害 美颜相机(java当中多种滤镜效果的实现)

美颜相机(java当中多种滤镜效果的实现)

2023-07-18 14:39| 来源: 网络整理| 查看: 265

java当中的多种滤镜效果的实现 1. 正常图片的绘画1.1缓冲图片和缓冲区的理解1.2 drawImage函数作用1.3 正常图片呈现 2.马赛克的绘制2.1马赛克绘制原理讲解2.2 马赛克图片的呈现 3.灰度图片的绘制3.1灰度原理的讲解3.2灰度图片效果呈现 4.底片效果的绘制4.1底片效果绘制原理4.2底片效果图片展示 5.油画效果5.1 油画原理5.2 油画效果展示 6. 黑白效果的实现6.1黑白效果的实现原理6.2 黑白图片展示 7. 珠纹效果的实现7.1珠纹实现原理7.2珠纹图片展示 8. 合成图片的实现8.1合成图片原理8.2合成图片的展示

1. 正常图片的绘画 //函数作用:正常图片绘画 public void drawzc(int arr[][],Graphics g) { BufferedImage bff =new BufferedImage(arr.length,arr[0].length,BufferedImage.TYPE_INT_RGB); Graphics ng =bff.getGraphics(); for(int i=0;i int pixel =arr[i][j]; //bff.setRGB(i, j, pixel); //会将(0101010101010101....)这种二进制模式的数字,转换成为(r,g,b)的形式 Color color =new Color(pixel); //一个点一个点的绘画就会让绘画变得很慢 ng.setColor(color); ng.drawLine(i, j, i, j); } } g.drawImage(bff, 0, 0,null); } 1.1缓冲图片和缓冲区的理解

一: 如果不使用一个 BufferedImage这样的类,那么图片会慢慢的出现在屏幕当中 当使用缓冲区的时候,我们先将图片的各种像素画在缓冲区当中,最后一次性的传输给电脑的屏幕,那样的话,电脑上就会一次性出现图片本身 二: 我们可以理解这样的过程是,因为图片像素的列遍是循环进行的,如果我们直接画的话就相当于是一点点的传输数据。但当我们使用缓冲区,那么就相当于在传输口哪里储存一定的数据的量以后,当达到某个值的时候,我们再将整体的数据全部传递给电脑 三:就相当于是直接用水龙头来给水缸接水,还是先用水桶储存一定的水量以后直接给水缸接水

1.2 drawImage函数作用

g.drawImage(参数1:缓冲图片,参数2:图片的x坐标,参数3:图片的y坐标,null) 作用:将绘画在缓冲区上的图片呈现在屏幕上

1.3 正常图片呈现

在这里插入图片描述

2.马赛克的绘制 public void drawMsk(int arr[][],Graphics g) { BufferedImage bff =new BufferedImage(arr.length,arr[0].length,BufferedImage.TYPE_INT_RGB); Graphics ng =bff.getGraphics(); //画出马赛克矩阵 for(int i=0;i int pixel =arr[i][j]; Color color =new Color(pixel); //因为从哪里获取的画笔,它的绘画就会在哪里进行 //用从缓冲图片中获取的像素,在进行绘画相当于将缓冲图片全部绘画完成 ng.setColor(color); ng.fillRect(i, j, 10, 10); } } g.drawImage(bff, 0,0,null); } 2.1马赛克绘制原理讲解

马赛克的实现可以理解成,我们在宽和高的图片像素上面都每隔十个点取一个像素点,然后用将该像素点的值,作为100个像素点位置的值,用ng.fillRect(i,j,10,10)来实现 使得下图每次都是左上角的像素点的值来填充100个像素点的位置 在这里插入图片描述

2.2 马赛克图片的呈现

在这里插入图片描述

3.灰度图片的绘制 public void drawhd(int arr[][],Graphics g) { BufferedImage bff =new BufferedImage(arr.length,arr[0].length,BufferedImage.TYPE_INT_RGB); Graphics ng =bff.getGraphics(); for(int i=0;i int pixel =arr[i][j]; Color color =new Color(pixel); //(r,g,b) int red =(int)(color.getRed()*0.299); int green =(int)(color.getGreen()*0.587); int blue =(int)(color.getBlue()*0.114); Color newcolor =new Color(red+green+blue,red+green+blue,red+green+blue); ng.setColor(newcolor);//获取的是 ng.drawLine(i, j, i, j); } } g.drawImage(bff,0,0,null); } 3.1灰度原理的讲解

就是当将图片当中的rgb值取一定的系数获取red,green,和blue的值,最后在将它们相加给新的color选项 int red =(int)(color.getRed()*0.299); int green =(int)(color.getGreen()*0.587); int blue =(int)(color.getBlue()*0.114); Color newcolor =new Color(red+green+blue,red+green+blue,red+green+blue)

3.2灰度图片效果呈现

在这里插入图片描述

4.底片效果的绘制 public void drawdp(int arr[][],Graphics g) { BufferedImage bff =new BufferedImage(arr.length,arr[0].length,BufferedImage.TYPE_INT_BGR); Graphics ng = bff.getGraphics(); for (int i=0;i int pixel =arr[i][j]; int newpixel =255-pixel; Color color =new Color(newpixel); ng.setColor(color); ng.drawLine(i, j, i,j); } } g.drawImage(bff, 0, 0,null); } 4.1底片效果绘制原理 int pixel =arr[i][j]; int newpixel =255-pixel; Color color =new Color(newpixel); 4.2底片效果图片展示

在这里插入图片描述

5.油画效果 public void drawyh(int arr[][],Graphics g) { BufferedImage bff =new BufferedImage(arr.length,arr[0].length,BufferedImage.TYPE_INT_BGR); Graphics ng =bff.getGraphics(); for(int i=0;i for (int j=0;j ng.setColor(Color.BLACK); } else { ng.setColor(Color.white); } ng.drawLine(i, j, i, j); } } g.drawImage(bff, 0, 0,null); } 6.1黑白效果的实现原理 int pixel =arr[i][j]; Color color =new Color(pixel); int r=color.getRed(); int green=color.getGreen(); int b =color.getBlue(); int val =(r+green+b)/3; if(val>100) { ng.setColor(Color.BLACK); } else { ng.setColor(Color.white); } ng.drawLine(i, j, i, j); }

就是当 r,g,b相加的值/3大于100以后我们理解为这个点的像素点是偏亮的点,那么我们将其绘画为白色,反之我们将其设置为黑色

6.2 黑白图片展示

在这里插入图片描述

7. 珠纹效果的实现 public void drawzw(int arr[][],Graphics g) { BufferedImage bff =new BufferedImage(arr.length,arr[0].length,BufferedImage.TYPE_INT_RGB); Graphics ng =bff.getGraphics(); for(int i=0;i int pixel =arr[i][j]; Color color =new Color(pixel); ng.setColor(color); ng.fillOval(i, j, 8, 8); } } g.drawImage(bff, 0, 0,null); } 7.1珠纹实现原理 for(int i=0;i for(int j=0;j int pixel1=arr1[i][j]; int pixel2=arr2[i][j]; Color color1 =new Color(pixel1); Color color2 =new Color(pixel2); int r1=color1.getRed(); int r2=color2.getRed(); int r=(int)(r1*0.7+r2*0.3); int g1=color1.getGreen(); int g2=color2.getGreen(); int green=(int)(g1*0.7+g2*0.3); int b1=color1.getBlue(); int b2=color1.getBlue(); int b=(int)(b1*0.7+b2*0.3); Color newcolor =new Color(r,green,b); ng.setColor(newcolor); ng.drawLine(i, j, i, j); } else { int pixel1 =arr1[i][j]; Color newcolor= new Color(pixel1); ng.setColor(newcolor); ng.drawLine(i, j, i, j); } } } g.drawImage(bff, 50, 50,null); } 8.1合成图片原理 Color color1 =new Color(pixel1); Color color2 =new Color(pixel2); int r1=color1.getRed(); int r2=color2.getRed(); int r=(int)(r1*0.7+r2*0.3); int g1=color1.getGreen(); int g2=color2.getGreen(); int green=(int)(g1*0.7+g2*0.3); int b1=color1.getBlue(); int b2=color1.getBlue(); int b=(int)(b1*0.7+b2*0.3);

其实就是获取两个图片的像素矩阵之后,然后将其rgb值分别乘以一定的比例系数,然后相加赋值给新的rgb值,最后将其绘制出来那么最终就会形成一个合成图片的形式

8.2合成图片的展示

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有