android 马赛克 代码,Android_Android 马赛克(Mosaics)效果,前几天看见开源项目效果好赞 - phpStudy...
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...相关推荐
- Android中通过ViewHelper.setTranslationY实现View移动控制(NineOldAndroids开源项目)
我们知道有不少开源project,能实现非常多不错的效果.前几天,我看了一个效果,刚好项目中也用到了这个jar包. 没事挖一挖 学一学(一说到挖一挖.那么问题来了.挖掘机技术究竟哪家强 ),看看不错的 ...
- 2017 开源中国评比的前100个优秀开源项目
这份榜单根据 2017 年开源中国社区新收录的开源项目的关注度和活跃度整理而来,这份最受关注的 100 款开源项目榜单在一定程度上预示着业界的最新流行趋势. 可以看到,前十名中有九个是国内开发者开发的 ...
- 企业级低代码平台,接私活必备的Java开源项目(附源码)
项目介绍 Jeecg-Boot 是一款基于代码生成器的智能开发平台!采用前后端分离架构:SpringBoot,Mybatis,Shiro,JWT,Vue&Ant Design.强大的代码生成器 ...
- python炫酷特效代码_推荐几个炫酷的 Python 开源项目
推荐几个炫酷的 Python 开源项目 项目一: Supervisor 简介: Supervisor 是实际企 业常用的一款 Linux/Unix 系统下的一个进程管理工具, 基于 Python 开发 ...
- springboot jwt token前后端分离_基于Spring Boot+Spring Security+JWT+Vue前后端分离的开源项目...
一.前言 最近整合Spring Boot+Spring Security+JWT+Vue 完成了一套前后端分离的基础项目,这里把它开源出来分享给有需要的小伙伴们 功能很简单,单点登录,前后端动态权限配 ...
- 国外排行前十的Python开源项目,短时间打造无数超级“黑客”!
文章最后有彩蛋哦! 导读:在过去的一个月,我们对近250个开源项目进行了排名,选出了前十. 我们比较了解在此期间有新的发布或是重大发布的项目.Mybridge AI基于多种因素对项目进行排名,以衡量其 ...
- 【代码托管】大量值得学习或者有意思的开源项目汇总
Awesome 毋庸置疑,Awesome是最受欢迎的 repo,它策划了从软件开发到硬件到商业的所有主题. 目前为止,它在Github上有超过164,000颗星,人们可以花上几天(几夜)时间来浏览它. ...
- android系统代码行数,鸿蒙用460万行的代码量,实现安卓1525万行代码实现的所有功能...
鸿蒙即将开源,目前最新的是OpenHarmony1.1,即将到来的是OpenHarmony,有很多同学对OpenHarmony的各个版本,以及L0到L5不太了解,现在就详细解释下.OpenHarmon ...
- Android开源项目分类汇总-转载
太长了,还是转载吧... 今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源项目分类汇总,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有 ...
最新文章
- APUE 学习笔记 - Chapter 6. System Data File and Infomation
- 【剑指offer-Java版】10二进制中1的个数
- python barrier option pricing_《Python金融数据分析》书内代码实战与讲解(二)金融衍生物定价...
- 科技业务同比增长超20%,中国平安“金融+科技”成了吗?
- apple air装双系统(win7)
- 搭建(增加) jenkins slave 机器
- Mac 使用常见问题汇集
- 互联网日报 | 4月25日 星期日 | 我国首辆火星车命名为“祝融”;哈啰出行正式递交招股书赴美上市;快手搜索月活超2.5亿...
- python 获取浏览器句柄下的网页控件_python webdriver操作浏览器句柄
- vscode remote 离线环境搭建
- glibc升级_Linux关于glibc等基本知识整理
- 基于stm32CubeMX和keil5的stm32f103学习编程
- 在线表格 x-spreadsheet(web excel)1.0.14 发布
- 常用Windows快捷键大全
- 网页上html表格如何导出excel,(将html网页导出excel表格数据库)如何将网页表格导出到excel...
- android 快速unity,关于android:Unity平台-快速集成华为性能管理服务
- .reg文件添加、修改、删除注册表的方法
- 利用OWASP Benchmark V1.2基准对国内静态检测工具的测评分析
- 十行js代码实现windows上录屏功能
- 卷积神经网络(CNN)图像识别知识总结
热门文章
- R Markdown语法集锦
- 阅读图像显著性检测论文五:2011年版本的Global Contrast Based Salient Region Detection
- 32、python绘制柱形图、单个、多个、堆积、双向柱形图
- 阿里P8终于总结出:SpringCloud+Docker+Tomcat+Nginx实战文档了
- github资源收藏地
- 每周记录(4月底停更了qvq)
- 活动报名 | 宾夕法尼亚大学助理教授苏炜杰:隐私数据保护的一些进展和未来展望...
- 100块钱兑换成10元、20元、50元(Java)
- 金融信息破局刍议【1】局面概览
- acw_sc__v2加密参数分析(XX找房、36氪、亿X欧、大TANGs商务)