Android 马赛克(Mosaics)效果

前几天看见开源项目效果好赞,看了下代码,实现大致就是在原界面之上覆盖一成自定义的View,获取到点击的那个View的内容(Bitmap),然后在覆盖的那个自定义View的特定位置画出来,之后就是对这个Bitmap做一些列拆分,变化重绘的过程。在这里根据他对bitmap的拆分,感觉用来实现Bitmap的效果也是不错的,就试着做一做。

在这里介绍使用两种方式实现马赛克效果.开始之前先看看效果

感觉还不错吧!

1、直接绘制

public static Bitmap getMosaicsBitmap(Bitmap bmp, double precent) {

long start = System.currentTimeMillis();

int bmpW = bmp.getWidth();

int bmpH = bmp.getHeight();

Bitmap resultBmp = Bitmap.createBitmap(bmpW, bmpH, Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(resultBmp);

Paint paint = new Paint();

double unit;

if (precent == 0) {

unit = bmpW;

} else {

unit = 1 / precent;

}

double resultBmpW = bmpW / unit;

double resultBmpH = bmpH / unit;

for (int i = 0; i < resultBmpH; i++) {

for (int j = 0; j < resultBmpW; j++) {

int pickPointX = (int) (unit * (j + 0.5));

int pickPointY = (int) (unit * (i + 0.5));

int color;

if (pickPointX >= bmpW || pickPointY >= bmpH) {

color = bmp.getPixel(bmpW / 2, bmpH / 2);

} else {

color = bmp.getPixel(pickPointX, pickPointY);

}

paint.setColor(color);

canvas.drawRect((int) (unit * j), (int) (unit * i), (int) (unit * (j + 1)), (int) (unit * (i + 1)), paint);

}

}

canvas.setBitmap(null);

long end = System.currentTimeMillis();

Log.v(TAG, "DrawTime:" + (end - start));

return resultBmp;

}

2、修改像素点

public static Bitmap getMosaicsBitmaps(Bitmap bmp, double precent) {

long start = System.currentTimeMillis();

int bmpW = bmp.getWidth();

int bmpH = bmp.getHeight();

int[] pixels = new int[bmpH * bmpW];

bmp.getPixels(pixels, 0, bmpW, 0, 0, bmpW, bmpH);

int raw = (int) (bmpW * precent);

int unit;

if (raw == 0) {

unit = bmpW;

} else {

unit = bmpW / raw; //原来的unit*unit像素点合成一个,使用原左上角的值

}

if (unit >= bmpW || unit >= bmpH) {

return getMosaicsBitmap(bmp, precent);

}

for (int i = 0; i < bmpH; ) {

for (int j = 0; j < bmpW; ) {

int leftTopPoint = i * bmpW + j;

for (int k = 0; k < unit; k++) {

for (int m = 0; m < unit; m++) {

int point = (i + k) * bmpW + (j + m);

if (point < pixels.length) {

pixels[point] = pixels[leftTopPoint];

}

}

}

j += unit;

}

i += unit;

}

long end = System.currentTimeMillis();

Log.v(TAG, "DrawTime:" + (end - start));

return Bitmap.createBitmap(pixels, bmpW, bmpH, Bitmap.Config.ARGB_8888);

}

从效率上来看,第二中方式效率会高10倍,只要是因为第一种方式绘制的次数太多了,而绘制是比较费时间的。这里特别提示,不要在大量的循环语句内部使用Log.v(...),这是一个很耗时间的操作。

是不是很有趣,大家可以亲自动手试验一下。相关阅读:

HTML5+CSS3绘制锯齿状的矩形

JAVA基础之控制台输入输出的实例代码

mysql的udf编程之非阻塞超时重传

纯css实现三角的简单实例

PHP中的Trait 特性及作用

Win10设置IE浏览器禁止网站弹出窗口的方法

jQuery遍历之next()、nextAll()方法使用实例

Java并发编程之栅栏(CyclicBarrier)实例介绍

详解WordPress中过滤链接与过滤SQL语句的方法

php的文件上传入门教程(实例讲解)

Linux系统下jailkit的安装与使用示例

asp.net控件DataList分页用法

WinXP/Vista/7/8/怎么免费升级Win10?必需这样

详解Java编程中if...else语句的嵌套写法

android 马赛克 代码,Android_Android 马赛克(Mosaics)效果,前几天看见开源项目效果好赞 - phpStudy...相关推荐

  1. Android中通过ViewHelper.setTranslationY实现View移动控制(NineOldAndroids开源项目)

    我们知道有不少开源project,能实现非常多不错的效果.前几天,我看了一个效果,刚好项目中也用到了这个jar包. 没事挖一挖 学一学(一说到挖一挖.那么问题来了.挖掘机技术究竟哪家强 ),看看不错的 ...

  2. 2017 开源中国评比的前100个优秀开源项目

    这份榜单根据 2017 年开源中国社区新收录的开源项目的关注度和活跃度整理而来,这份最受关注的 100 款开源项目榜单在一定程度上预示着业界的最新流行趋势. 可以看到,前十名中有九个是国内开发者开发的 ...

  3. 企业级低代码平台,接私活必备的Java开源项目(附源码)

    项目介绍 Jeecg-Boot 是一款基于代码生成器的智能开发平台!采用前后端分离架构:SpringBoot,Mybatis,Shiro,JWT,Vue&Ant Design.强大的代码生成器 ...

  4. python炫酷特效代码_推荐几个炫酷的 Python 开源项目

    推荐几个炫酷的 Python 开源项目 项目一: Supervisor 简介: Supervisor 是实际企 业常用的一款 Linux/Unix 系统下的一个进程管理工具, 基于 Python 开发 ...

  5. springboot jwt token前后端分离_基于Spring Boot+Spring Security+JWT+Vue前后端分离的开源项目...

    一.前言 最近整合Spring Boot+Spring Security+JWT+Vue 完成了一套前后端分离的基础项目,这里把它开源出来分享给有需要的小伙伴们 功能很简单,单点登录,前后端动态权限配 ...

  6. 国外排行前十的Python开源项目,短时间打造无数超级“黑客”!

    文章最后有彩蛋哦! 导读:在过去的一个月,我们对近250个开源项目进行了排名,选出了前十. 我们比较了解在此期间有新的发布或是重大发布的项目.Mybridge AI基于多种因素对项目进行排名,以衡量其 ...

  7. 【代码托管】大量值得学习或者有意思的开源项目汇总

    Awesome 毋庸置疑,Awesome是最受欢迎的 repo,它策划了从软件开发到硬件到商业的所有主题. 目前为止,它在Github上有超过164,000颗星,人们可以花上几天(几夜)时间来浏览它. ...

  8. android系统代码行数,鸿蒙用460万行的代码量,实现安卓1525万行代码实现的所有功能...

    鸿蒙即将开源,目前最新的是OpenHarmony1.1,即将到来的是OpenHarmony,有很多同学对OpenHarmony的各个版本,以及L0到L5不太了解,现在就详细解释下.OpenHarmon ...

  9. Android开源项目分类汇总-转载

    太长了,还是转载吧... 今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源项目分类汇总,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有 ...

最新文章

  1. APUE 学习笔记 - Chapter 6. System Data File and Infomation
  2. 【剑指offer-Java版】10二进制中1的个数
  3. python barrier option pricing_《Python金融数据分析》书内代码实战与讲解(二)金融衍生物定价...
  4. 科技业务同比增长超20%,中国平安“金融+科技”成了吗?
  5. apple air装双系统(win7)
  6. 搭建(增加) jenkins slave 机器
  7. Mac 使用常见问题汇集
  8. 互联网日报 | 4月25日 星期日 | 我国首辆火星车命名为“祝融”;哈啰出行正式递交招股书赴美上市;快手搜索月活超2.5亿...
  9. python 获取浏览器句柄下的网页控件_python webdriver操作浏览器句柄
  10. vscode remote 离线环境搭建
  11. glibc升级_Linux关于glibc等基本知识整理
  12. 基于stm32CubeMX和keil5的stm32f103学习编程
  13. 在线表格 x-spreadsheet(web excel)1.0.14 发布
  14. 常用Windows快捷键大全
  15. 网页上html表格如何导出excel,(将html网页导出excel表格数据库)如何将网页表格导出到excel...
  16. android 快速unity,关于android:Unity平台-快速集成华为性能管理服务
  17. .reg文件添加、修改、删除注册表的方法
  18. 利用OWASP Benchmark V1.2基准对国内静态检测工具的测评分析
  19. 十行js代码实现windows上录屏功能
  20. 卷积神经网络(CNN)图像识别知识总结

热门文章

  1. R Markdown语法集锦
  2. 阅读图像显著性检测论文五:2011年版本的Global Contrast Based Salient Region Detection
  3. 32、python绘制柱形图、单个、多个、堆积、双向柱形图
  4. 阿里P8终于总结出:SpringCloud+Docker+Tomcat+Nginx实战文档了
  5. github资源收藏地
  6. 每周记录(4月底停更了qvq)
  7. 活动报名 | 宾夕法尼亚大学助理教授苏炜杰:隐私数据保护的一些进展和未来展望...
  8. 100块钱兑换成10元、20元、50元(Java)
  9. 金融信息破局刍议【1】局面概览
  10. acw_sc__v2加密参数分析(XX找房、36氪、亿X欧、大TANGs商务)