java入门之 美图相机-缓存功能
通过之前的美图相机(http://t.csdn.cn/OvvWv)我们可以发现,最终所绘制出的图片是缓慢的展开的(可以理解为计算机现画图片,一个像素点一个像素点的绘制),那么要想让图片迅速展现,我们是不是可以将要绘制的图片现存在一个地方,在需要的绘制的时候,直接呈现出来。这就要利用到缓冲流了。
目录
<1> 缓冲流 原理
<2> 具体流程
<3> 绘制原图 完整代码
<4> 绘制灰度图 完整代码
<5> 绘制二值化图 完整代码
<1> 缓冲流 原理
创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。要创建缓冲区数组,也就意味着需要占据内存!
数据读取速度:寄存器 > 内存 > 磁盘
<2> 具体流程
1、首先我们需要先创建一个BufferedImage 的缓冲区
//提升速度BufferedImage buffimg = new BufferedImage(imageArr.length,imageArr[0].length,BufferedImage.TYPE_INT_ARGB);
2、让缓冲区的对象获得RBG
buffimg.setRGB(i, j, pixnum);
3、用画笔画出结果
g.drawImage(buffimg, 100, 50, null);
<3> 绘制原图 完整代码
/** 绘制原图*/public void drawImage(int[][] imageArr,Graphics g) {//提升速度BufferedImage buffimg = new BufferedImage(imageArr.length,imageArr[0].length,BufferedImage.TYPE_INT_ARGB);for(int i = 0;i < imageArr.length;i++) {for(int j = 0;j < imageArr[i].length;j++) {int pixnum = imageArr[i][j];buffimg.setRGB(i, j, pixnum);}}g.drawImage(buffimg, 100, 50, null);}
<4> 绘制灰度图 完整代码
/** 绘制灰度图*/public void drawGrayImage(int[][] imageArr,Graphics g) {//提升速度BufferedImage buffimg = new BufferedImage(imageArr.length,imageArr[0].length,BufferedImage.TYPE_INT_ARGB);for(int i = 0;i < imageArr.length;i++) {for(int j = 0;j < imageArr[i].length;j++) {int pixnum = imageArr[i][j];//将像素拆开int red = (pixnum >> 16)&255;int green = (pixnum >> 8)&255;int blue = (pixnum >> 0)&255;//灰度运算(R=G=B)int gray = (red + green + blue)/3;int colorgray = 255<<24|gray<<16|gray<<8|gray;buffimg.setRGB(i, j, colorgray);}}g.drawImage(buffimg, 100, 50, null);}
<5> 绘制二值化图 完整代码
/** 二值化*/public void drawBinaryImage(int[][] imageArr,Graphics g) {//提升速度BufferedImage buffimg = new BufferedImage(imageArr.length,imageArr[0].length,BufferedImage.TYPE_INT_ARGB);for(int i = 0;i < imageArr.length;i++) {for(int j = 0;j < imageArr[i].length;j++) {int pixnum = imageArr[i][j];//将像素拆分int red = (pixnum >> 16)&255;int green = (pixnum >> 8)&255;int blue = (pixnum >> 0)&255;//计算灰度值int gray = (red+green+blue)/3;//利用灰度值做二分法int colorgray = 0;if(gray<125) {colorgray = 255<<24|0000<<16|0000<<8|0000;}else {colorgray = 255<<24|1011<<16|1011<<8|1011;}buffimg.setRGB(i, j, colorgray);}}g.drawImage(buffimg, 100, 50, null);}
<5> 绘制马赛克 完整代码
马赛克的绘制与原图一样,只不过需要注意马赛克是一个方块一个方块,原图是一个一个的像素点,所以我们需要将缓冲的画笔赋值给画笔对象bg,再用bg去获得像素颜色绘制出方块。
(若我们只在原图的基础上修改for循环i++ --> i+10,会导致所绘制出来的是一个一个间隔较远的像素点)
/*** 马赛克*/public void drawMosaicImage(int[][] imageArr,Graphics g) {//提升速度BufferedImage buffimg = new BufferedImage(imageArr.length,imageArr[0].length,BufferedImage.TYPE_INT_ARGB);Graphics bg = buffimg.getGraphics();for(int i = 0;i < imageArr.length;i+=10) {for(int j = 0;j < imageArr[i].length;j+=10) {int pixnum = imageArr[i][j];Color color = new Color(pixnum);bg.setColor(color);bg.fillRect(i, j, 8, 10);//画方块}}g.drawImage(buffimg, 100, 100, null);}
融合的缓冲和上面的一样
java入门之 美图相机-缓存功能相关推荐
- java入门之 美图相机(原图、灰度、二值化、马赛克、融合、轮廓获取)
编写美图相机时,我们首先需要了解图片再计算机中的存储形式,详情可见http://t.csdn.cn/MgOfO 目录 <1>创建显示图片的主界面 1.添加窗体,用数列添加按钮,设置窗体可视 ...
- 美图手机投射功能在哪_在Java 8中进行投射(还有其他功能?)
美图手机投射功能在哪 将实例转换为设计不良的类型. 尽管如此,在某些情况下没有其他选择. 从第一天开始,执行此功能就已成为Java的一部分. 我认为Java 8提出了对这种古老技术稍加改进的需求. 静 ...
- 杭州美图JAVA面试(美图美妆app组)
杭州美图JAVA面试(美图美妆app组) 办公环境地毯,但是看到工位也是没有卡位,总体拥挤. 技术总监面:30min 1. Restful风格有哪些,有什么优点?http://www.cn ...
- MATLAB美图软件算法研究,【网络多媒体学】matlab实现美图秀秀基本功能.ppt
[网络多媒体学]matlab实现美图秀秀基本功能 ;;PPT模板下载:/moban/ ;PPT模板下载:/moban/ ;PPT模板下载:/moban/ ;角度旋转; B = imrotate(A,a ...
- java sns_SNS:美图秀秀的社交化变革
上个月,美图秀秀的新版本进行了大规模改动,宣布进军社交方向,转型工具+社交平台.最新版本直接将社区放在首页,不需要再做点击跳转.同时,兼顾用户原来的使用习惯,将美图秀秀的工具模块保留在首页上半部. 吴 ...
- AI美图相机原型(智能P图、AI换脸)
作品页数:共17页,包含漫画脸.毕业照.童颜照.换背景.换肤色.换发型.换性别.加表情.加特效.二次元等美图效果 作品特色: 1.全交互效果,具体大家可以自行体验 2.复用性高,里面大部分元件规范,可 ...
- 小作品--linux下设计MATLAB GUI 实现美图秀秀的功能
一.作品介绍 首先展示一下效果: 点击左下方的三个图片选项,可以自动给画面中的人脸添加卡通耳朵,卡通胡子等特效, 智能美肤还不知道怎么实现,只留了个控件,没有具体功能. 接下来介绍下作品的制作思路: ...
- 美图笔试题java后台_美图2018秋招Java笔试题
单选题 1.关于垃圾回收算法G1,哪个说法是错误的( B ). A. 并行和并发,具有多线程操作能力 B. 不适用堆空间太大的场景 C. G1停顿时间更加可预测 D. 不会对系统吞吐量产生较 ...
- 【android】拼图实现浅谈(类似美图秀秀拼图功能
又好久没有写东西.本来这个东西在两个月之前就该记录下来的,拖了那么久,醉过醉过. 今天介绍的是android实现一个基础的拼图功能.之前项目中需要到拼图的功能,首先就是第一反应就是geogle有没有可 ...
最新文章
- Error in exists(x): 第一个参数不对
- Sum All Numbers in a Range
- omct问题之-webapps下多出的ROOT目录
- java bufferedwriter 写入tab_Java基础-IO流
- opendrive匝道
- OpenShift 4 - Knative教程 (6) Eventing之Channel和Subscription
- 确认取消按钮{删除接口循环返回的数据}
- Linux全攻略--Apache服务器配置与管理(三)
- ubutu虚拟机和主机共享同一网络
- Unity - Timeline 之 Activation track properties(激活轨道的属性)
- MySQL自学笔记(三)
- 为什么微博超话显示服务器有点累,微博超话帖子被吞是什么原因?使用时,注意这些事项...
- k8s集成containerd,集成crictl工具,集成kata
- 迪士尼鳄鱼洗澡背后的传奇人物:哥以前是干DJ的!
- python串口控制8通道继电器方法笔记
- 横向越权和纵向越权(水平越权、垂直越权)
- 盘古开源解析:芯片订单超过产能,2022汽车出现缺芯难题
- 技术探究|Apache Pulsar 认证与鉴权实践指南
- nginx反向代理websocket 小坑
- android市场发展前景,安卓模拟器市场发展前景怎么样