通过之前的美图相机(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入门之 美图相机-缓存功能相关推荐

  1. java入门之 美图相机(原图、灰度、二值化、马赛克、融合、轮廓获取)

    编写美图相机时,我们首先需要了解图片再计算机中的存储形式,详情可见http://t.csdn.cn/MgOfO 目录 <1>创建显示图片的主界面 1.添加窗体,用数列添加按钮,设置窗体可视 ...

  2. 美图手机投射功能在哪_在Java 8中进行投射(还有其他功能?)

    美图手机投射功能在哪 将实例转换为设计不良的类型. 尽管如此,在某些情况下没有其他选择. 从第一天开始,执行此功能就已成为Java的一部分. 我认为Java 8提出了对这种古老技术稍加改进的需求. 静 ...

  3. 杭州美图JAVA面试(美图美妆app组)

    杭州美图JAVA面试(美图美妆app组) 办公环境地毯,但是看到工位也是没有卡位,总体拥挤. 技术总监面:30min 1.       Restful风格有哪些,有什么优点?http://www.cn ...

  4. MATLAB美图软件算法研究,【网络多媒体学】matlab实现美图秀秀基本功能.ppt

    [网络多媒体学]matlab实现美图秀秀基本功能 ;;PPT模板下载:/moban/ ;PPT模板下载:/moban/ ;PPT模板下载:/moban/ ;角度旋转; B = imrotate(A,a ...

  5. java sns_SNS:美图秀秀的社交化变革

    上个月,美图秀秀的新版本进行了大规模改动,宣布进军社交方向,转型工具+社交平台.最新版本直接将社区放在首页,不需要再做点击跳转.同时,兼顾用户原来的使用习惯,将美图秀秀的工具模块保留在首页上半部. 吴 ...

  6. AI美图相机原型(智能P图、AI换脸)

    作品页数:共17页,包含漫画脸.毕业照.童颜照.换背景.换肤色.换发型.换性别.加表情.加特效.二次元等美图效果 作品特色: 1.全交互效果,具体大家可以自行体验 2.复用性高,里面大部分元件规范,可 ...

  7. 小作品--linux下设计MATLAB GUI 实现美图秀秀的功能

    一.作品介绍 首先展示一下效果: 点击左下方的三个图片选项,可以自动给画面中的人脸添加卡通耳朵,卡通胡子等特效, 智能美肤还不知道怎么实现,只留了个控件,没有具体功能. 接下来介绍下作品的制作思路: ...

  8. 美图笔试题java后台_美图2018秋招Java笔试题

    单选题 1.关于垃圾回收算法G1,哪个说法是错误的( B  ). A.  并行和并发,具有多线程操作能力 B.  不适用堆空间太大的场景 C.  G1停顿时间更加可预测 D.  不会对系统吞吐量产生较 ...

  9. 【android】拼图实现浅谈(类似美图秀秀拼图功能

    又好久没有写东西.本来这个东西在两个月之前就该记录下来的,拖了那么久,醉过醉过. 今天介绍的是android实现一个基础的拼图功能.之前项目中需要到拼图的功能,首先就是第一反应就是geogle有没有可 ...

最新文章

  1. Error in exists(x): 第一个参数不对
  2. Sum All Numbers in a Range
  3. omct问题之-webapps下多出的ROOT目录
  4. java bufferedwriter 写入tab_Java基础-IO流
  5. opendrive匝道
  6. OpenShift 4 - Knative教程 (6) Eventing之Channel和Subscription
  7. 确认取消按钮{删除接口循环返回的数据}
  8. Linux全攻略--Apache服务器配置与管理(三)
  9. ubutu虚拟机和主机共享同一网络
  10. Unity - Timeline 之 Activation track properties(激活轨道的属性)
  11. MySQL自学笔记(三)
  12. 为什么微博超话显示服务器有点累,微博超话帖子被吞是什么原因?使用时,注意这些事项...
  13. k8s集成containerd,集成crictl工具,集成kata
  14. 迪士尼鳄鱼洗澡背后的传奇人物:哥以前是干DJ的!
  15. python串口控制8通道继电器方法笔记
  16. 横向越权和纵向越权(水平越权、垂直越权)
  17. 盘古开源解析:芯片订单超过产能,2022汽车出现缺芯难题
  18. 技术探究|Apache Pulsar 认证与鉴权实践指南
  19. nginx反向代理websocket 小坑
  20. android市场发展前景,安卓模拟器市场发展前景怎么样

热门文章

  1. 计算机组成原理之控制器
  2. linux驱动源码阅读之情景分析法实践指南
  3. 记一次短信/彩信拦截 还有锁屏打开页面
  4. 小能手英语口语学习笔记 1 48个国际音标
  5. wordpress短代码转php,wordpress短代码使用教程
  6. Python基础——常见数据类型总结
  7. 荀子 《劝学》 - 木直中绳,輮以为轮,其曲中规。
  8. 献给毕业生:五百强各大行业简介+面试流程+tips (zhuan)
  9. 怎么把文字生成图片?三款ai绘画生成器分享
  10. Django框架(十一):用户认证组件