Java中的实现马赛克效果以及灰度效果----整张图片
**
Java中的实现马赛克效果以及灰度效果-----整张图片
**
实现该效果的思路:
我们知道图片是由一个一个的像素组成的,比如一张图片的分辨率为800 * 800,则它是由800个像素 * 800像素=640000像素组成的。我们要实现马赛克的效果,就是要局部区域像素用一个像素值来替代,换句话说,就是比如局部区域是10像素*10像素,在这些像素中,它们的值是不一样的,现在就像着能不能将该区域中的像素用一个像素的值来进行表示这段局部区域所有的像素值,这样我们就能过实现马赛克的一个效果了。
先来看整体的代码,整体的代码如下:
package com.yf1103;import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;import javax.imageio.ImageIO;
import javax.swing.JFrame;public class DrawFrame {public static void main(String[] args) {DrawFrame drawpanel = new DrawFrame();drawpanel.showUI();}public void showUI() {JFrame jf = new JFrame();jf.setTitle("图片");jf.setSize(500, 500);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setLayout(new FlowLayout());jf.setLocationRelativeTo(null);jf.setVisible(true);//获取画笔一定要在可见之后Graphics g = jf.getGraphics();drawpaint(g);}public void drawpaint(Graphics g) {int[][] array = getImagePixel("image/2.png");for(int i = 0; i<array.length; i += 10) {for(int j = 0; j < array[0].length; j += 10) {int pixel = array[i][j];Color color = new Color(pixel);g.setColor(color);g.fillRect(i, j, 10 , 10);}}}public int[][] getImagePixel(String path){File file = new File(path);BufferedImage bufferImage = null;try {bufferImage = ImageIO.read(file);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}int w = bufferImage.getWidth();int h = bufferImage.getHeight();int [][] pixelArray = new int[w][h];for(int i = 0; i < w; i++) {for(int j = 0; j < h; j++) {//读取每个位置的像素点对应的RGB值int pixel = bufferImage.getRGB(i, j);pixelArray[i][j] = pixel;}}return pixelArray;}
}
实现的效果:
原图为:
现在我们来分析这段代码:
首先,我们利用getImagePixel方法,通过传入String类型的path变量,去得到图片上的每一个像素值的RGB的值pixel,然后将值pixel存入一个像素数组pixelArray中去;
然后,利用 drawpaint 方法,通过传入Graphics 类型的 g 变量,也称之为 画笔。利用该方法遍历之前像素数组中的每一个像素,然后将其转换为color 值,然后再设置给画笔,最后填充成一个矩形,这样我们就能够得到整张图片的马赛克效果了。
这里需要提醒的一点:
当我需要改这个马赛克大小的时候,改变下面这张图片的红色圈的地方是不行的,还需要将绿色圈的地方做相应的修改,如果红色圈内和绿色圈的值都改为1,那么输出的就是原图了。该图片如下:
灰度效果:
先可以看一段代码(该段代码是基于上述的代码改动一些地方):
这段代码主要是较上述的代码改动的地方在于画红色的圈的地方,实现灰度效果的想法是: 利用得到的color对象来分离像素中的r,g,b值,因为这个color对象包含图片中每个像素点的r,g,b值,现在要做的就是去从这个color对象中将r,g,b值分别拿出来,然后再将每个像素的r,g,b值进行求平均值,然后再这个平均值col值设置给画笔,从而就能够实现图像的灰度化。
结果显示为:
原图为:
Java中的实现马赛克效果以及灰度效果----整张图片相关推荐
- java 整型数组定义_在Java中定义一个具有10个元素的整型数组a的语句是:___
在Java中定义一个具有10个元素的整型数组a的语句是:___ 答: int [] arr = new int[10] 在借贷记账法下() 答:在账户结构上,"借"和"贷 ...
- JAVA中double转int类型按四舍五入取整(实用)
public static void main(String[] args) {System.out.println("向上取整:" + (int) Math.ceil(96.1) ...
- Java中notify和notifyAll的区别 - 何时以及如何使用
Java notify vs notifyAll notify和notifyAll方法之间有什么区别是棘手的Java问题之一! Condition 是个什么玩意? 提几个问题,从问题中去了解去学 ...
- Java中indexof()的用法
Java中indexof()的用法 indexOf 方法返回一个整数值,指出 String 对象内子字符串的开始位置.如果没有找到子字符串,则返回-1. 如果 startindex 是负数,则 sta ...
- Java中的取整方法
在Java中,Math类有四个取整方法 方法 描述 ceil(x) x向上取整为它最接近的整数,以双精度值返回 floor(x) x向下取整为它最接近的整数,以双精度值返回 rint(x) x取整为它 ...
- Android 对整张图片打马赛克
并没有像其他例子一样对局部打马赛克,这个算法是对整张图片打马赛克. /*** @description 图片打马赛克** @param bitmap* 需要打马赛克的图片* @param BLOCK_ ...
- Java中实现六种图像处理的效果(灰度化、马赛克效果、去背景实现、珠纹化实现、黑白版画效果、油画效果)
** Java中实现六种图像处理的效果(灰度化.马赛克效果.去背景实现.珠纹化实现.黑白版画效果.油画效果) ** 本文的编程的思想: 先将实现这六种效果的方法写入一个名为pic_performanc ...
- Java中实现图像的卷积效果
** Java中实现图像的卷积效果 ** 图像的卷积: 指的是使用一个卷积核(kernel)对图像中的每一个像素进行一些列操作.卷积核(算子)是用来做图像处理时的矩阵,图像处理时也称为掩膜,是于原图像 ...
- html5游戏开发马赛克对比,HTML5如何在canvas中实现马赛克的淡入淡出效果
HTML5如何在canvas中实现马赛克的淡入淡出效果 发布时间:2020-07-10 16:43:07 来源:亿速云 阅读:145 作者:Leah 本篇文章给大家分享的是有关HTML5如何在canv ...
最新文章
- javaweb学习总结(四十)——编写自己的JDBC框架
- id文件夹怎样传入服务器,服务器id怎么设置
- 数据库开发——MySQL——约束条件与表关系
- jarsigner签名过程
- java代码优化_java代码之美(11)---java代码的优化
- 编辑流程图_流程图不会绘制?一分钟手把手教你学会,超简单
- python多版本控制操作方法
- chart控件做实时曲线显示_组态王实时趋势曲线控件介绍,让你对此不再陌生
- Zookeeper深入系列-从Zookeeper中深入JMX原理
- java 内存管理 知乎_[知乎]Java 语言的 GC 为什么不实时释放内存?
- 代码中的时间格式问题究竟该如何处理?
- 出现红字是电脑问题吗_苹果12还会出现信号不好的问题吗?
- linux计划任务 没30s_一分钟学会电脑Linux系统和Windows另类的关机方法,6到飞起来...
- mysql表字段一定要写英文吗_关于数据库列名是否必须是英文的?
- 大神教你如何优化变压器匝间电容?
- 使用两种方式,Android 发送文件到指定邮箱(带多个附件)
- Django基础-中文文档
- 聚合物电容器工作原理及其应用
- 市场上股票接盘合作,大宗交易锁仓返点资源变现渠道
- 2011年网页设计发展趋势
热门文章
- java 反爬虫_springboot反爬虫组件kk-anti-reptile的使用方法
- Linux的文件管理命令
- jQuery实现浮动层跟随页面滚动效果
- python字符编码讲解_python 字符编码讲解
- mysql 普通索引和唯一索引_MySQL 普通索引和唯一索引的区别
- vue router name命名规范_超完整的Vue入门指导
- mysql 5.6多实例_MySQL 5.6.x多实例配置
- ubuntu mysql允许远程连接mysql_ubuntu下允许mysql远程连接
- c语言表达逻辑量的方法,c语言中用什么表示逻辑量为真
- 电脑有独显内存还被占用_独显和集成显卡怎么分别