android图片马赛克 mosaic

https://github.com/shenkaige/andtools/blob/master/src/com/phodev/andtools/utils/MosaicProcessor.java

1.[图片] mosaic.jpg

2.[代码][Java]代码

package com.phodev.andtools.utils;

import android.graphics.Bitmap;

import android.graphics.Bitmap.Config;

import android.graphics.Rect;

/**

* mosaic processor

*

* @author sky

*

*/

public class MosaicProcessor {

public static final int min_mosaic_block_size = 4;

private MosaicProcessor() {

}

/**

*

* @param bitmap

* @param targetRect

* @param blockSize

* {@link #min_mosaic_block_size}

* @return

* @throws Exception

*/

public static Bitmap makeMosaic(Bitmap bitmap, Rect targetRect,

int blockSize) throws OutOfMemoryError {

if (bitmap == null || bitmap.getWidth() == 0 || bitmap.getHeight() == 0

|| bitmap.isRecycled()) {

throw new RuntimeException("bad bitmap to add mosaic");

}

if (blockSize < min_mosaic_block_size) {

blockSize = min_mosaic_block_size;

}

if (targetRect == null) {

targetRect = new Rect();

}

int bw = bitmap.getWidth();

int bh = bitmap.getHeight();

if (targetRect.isEmpty()) {

targetRect.set(0, 0, bw, bh);

}

//

int rectW = targetRect.width();

int rectH = targetRect.height();

int[] bitmapPxs = new int[bw * bh];

// fetch bitmap pxs

bitmap.getPixels(bitmapPxs, 0, bw, 0, 0, bw, bh);

//

int rowCount = (int) Math.ceil((float) rectH / blockSize);

int columnCount = (int) Math.ceil((float) rectW / blockSize);

int maxX = bw;

int maxY = bh;

for (int r = 0; r < rowCount; r++) { // row loop

for (int c = 0; c < columnCount; c++) {// column loop

int startX = targetRect.left + c * blockSize + 1;

int startY = targetRect.top + r * blockSize + 1;

dimBlock(bitmapPxs, startX, startY, blockSize, maxX, maxY);

}

}

return Bitmap.createBitmap(bitmapPxs, bw, bh, Config.ARGB_8888);

}

/**

* 从块内取样,并放大,从而达到马赛克的模糊效果

*

* @param pxs

* @param startX

* @param startY

* @param blockSize

* @param maxX

* @param maxY

*/

private static void dimBlock(int[] pxs, int startX, int startY,

int blockSize, int maxX, int maxY) {

int stopX = startX + blockSize - 1;

int stopY = startY + blockSize - 1;

if (stopX > maxX) {

stopX = maxX;

}

if (stopY > maxY) {

stopY = maxY;

}

//

int sampleColorX = startX + blockSize / 2;

int sampleColorY = startY + blockSize / 2;

//

if (sampleColorX > maxX) {

sampleColorX = maxX;

}

if (sampleColorY > maxY) {

sampleColorY = maxY;

}

int colorLinePosition = (sampleColorY - 1) * maxX;

int sampleColor = pxs[colorLinePosition + sampleColorX - 1];// 像素从1开始,但是数组层0开始

for (int y = startY; y <= stopY; y++) {

int p = (y - 1) * maxX;

for (int x = startX; x <= stopX; x++) {

// 像素从1开始,但是数组层0开始

pxs[p + x - 1] = sampleColor;

}

}

}

}

android马赛克代码,android图片马赛克 mosaic相关推荐

  1. android 怎么代码把图片切成两半,android – 将RelativeLayout分成两半

    试试这个布局.如果不完美,这应该适用于一些变化.这将添加两个图表. android:layout_width="fill_parent" android:layout_height ...

  2. android滴滴打车代码,Android 端滴滴打车接口的开发

    前两天做了一个对Android端'滴滴打车'的接口开发吧! 今天来做个简单的流程, 滴滴会提供这样一个接口, http://webapp.diditaxi.com.cn/? maptype=wgs&a ...

  3. android 共享代码,Android团队成员间的代码共享!(Git+Github版)

    原创,转载请说明出处. 一. 这篇文章要解决什么问题,能学习到什么? 在android团队的开发中,少不了与队员之间的合作.为了避免我们傻瓜式地复制粘贴对方的负责的那部分功能代码,我们可以用svn或者 ...

  4. 名片夹android布局代码,Android自定义布局实现仿qq侧滑部分代码

    自定义布局实现仿qq侧滑部分Android代码,供大家参考,具体内容如下 实现说明: 通过自定义布局实现: SlidingLayout继承于 HorizontalScrollView /** * Cr ...

  5. 获取android型号代码,Android应用开发之Android获取手机品牌、手机型号、手机唯一序列号的代码教程...

    本文将带你了解Android应用开发Android获取手机品牌.手机型号.手机唯一序列号的代码教程,希望本文对大家学Android有所帮助. Android获取手机品牌.手机型号.手机唯一序列号的代码 ...

  6. android gravity 代码,android:layout_gravity和android:gravity属性的区别

    android:gravity / android:layout_gravity区别: android:gravity 是设置该view类里面的内容相对于该view的位置,例如设置button里面的t ...

  7. android扔骰子代码,Android实现掷骰子效果

    本文实例为大家分享了android实现掷骰子效果的具体代码,供大家参考,具体内容如下 利用handler接受子线程的消息完成骰子点数的不断更替 演示 start:开始游戏 stop:停止游戏 reco ...

  8. android linearlayout 代码,Android如何从代码向另一个LinearLayout添加Linearlayout

    我在main.xml中有一个LinearLayout: android:layout_width="match_parent" android:layout_height=&quo ...

  9. android摄像头代码,Android摄像头

    [android]代码库import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStrea ...

最新文章

  1. 【转】 ADO.NET最佳实践
  2. Bootstrap 模态对话框只加载一次 remote 数据的解决办法
  3. oracle10g rac升级到10.2.0.5
  4. [深度学习-实践]tensorflow_hub简单理解模型的生成与加载
  5. PhotoSwipe源码解读系列(二)
  6. Java开发笔记(八十八)文件字节I/O流
  7. 构建大型网站架构服务器集群(转)
  8. Linux串口驱动分析read
  9. windows server 2008 远程桌面(授权、普通用户登录)
  10. 微信公众号运营辅助工具汇总
  11. day1.数据库初步了解
  12. vista/win7系统 红警/CS/星际争霸 局域网连接方法
  13. 弹出停止U盘安全删除硬件的命令
  14. 变分法求解最优控制问题推导思路
  15. java版怎么安装mod_java – 如何在Mac OS X上安装mod_jk
  16. 开源中文切词工具介绍
  17. 【Windows 11】系统安装修改版 Subsystem for Android 安卓子系统,并用 Magisk Root
  18. NIT 股市风云 按位与运算 F. 休赛季的引援#2
  19. idead导入maven多模块
  20. 数据安全技术研究国外

热门文章

  1. opencv已知相机投影及内参求外参_一步步用c++实现相机标定(张氏标定法)
  2. python怎么读取csv文件-使用Python读写csv文件的三种方法
  3. python入门经典100题-Python基础训练100题(带答案)[DOC][47KB]
  4. python教程视频下载-python怎么下载视频
  5. 用python画简单的图案-使用 Python Turtle 设计简单而又美丽的图形
  6. python 代码命令大全-深度学习中python常用命令
  7. php url参数用–,php获取URL各部分参数
  8. 马克思知识点总结(一)
  9. LeetCode 718最长重复子数组
  10. 常用编码软件简单使用记录 2 : 非自主编码器