文档章节

android开发笔记之多媒体—图片的颜色处理

Mr_Nice
 Mr_Nice
发布于 2016/05/22 20:02
字数 469
阅读 2
收藏 0
点赞 2
评论 0

1.拿到原图

baseBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pre);

2.拿到一张与原图同样大小的纸

copyBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), baseBitmap.getConfig());

3.把画纸固定在画布上

canvas = new Canvas(copyBitmap);

4.拿到画笔

paint = new Paint();

5.给画笔设置颜色过滤器

//vactor的取值范围0-2
        float[] colors = new float[]{
            red_vactor ,0 ,0 ,0 ,0,   
            0 ,green_vactor ,0 ,0 ,0,   
            0 ,0 ,blue_vactor ,0 ,0,   
            0 ,0 ,0 ,1 ,0
        };
        //给画笔设置颜色过滤器
        paint.setColorFilter(new ColorMatrixColorFilter(colors));

6.处理规则

Matrix matrix = new Matrix();

7.照着原图画

canvas.drawBitmap(baseBitmap, matrix, paint);

8.把图片显示在ImageView组件上

iv.setImageBitmap(copyBitmap);

效果图:

这里写图片描述

核心代码:

public class MainActivity extends Activity implements OnSeekBarChangeListener{

    private Bitmap baseBitmap,copyBitmap;//原图和复制的图
    private Canvas canvas;              //画布
    private Paint paint;                //画笔
    private SeekBar red_seekbar,blue_seekbar,green_seekbar; //拖动条
    private ImageView iv;                   
    private float red_vactor,blue_vactor,green_vactor;//用来记录RGB三种颜色的量的
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        red_seekbar = (SeekBar) findViewById(R.id.red_seekbar);
        blue_seekbar = (SeekBar) findViewById(R.id.blue_seekbar);
        green_seekbar = (SeekBar) findViewById(R.id.green_seekbar);
        iv = (ImageView) findViewById(R.id.iv);
        red_seekbar.setOnSeekBarChangeListener(this);
        blue_seekbar.setOnSeekBarChangeListener(this);
        green_seekbar.setOnSeekBarChangeListener(this);
    }
    //进度改变的时候调用
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
            boolean fromUser) {

    }
    //开始拖动的时候调用
    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {

    }
    //停止拖动的时候调用
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        float progress = seekBar.getProgress(); 
        float count = progress / 50f;       //使拖动条的值为0f-2f
        switch (seekBar.getId()) {
        case R.id.red_seekbar:
            this.red_vactor = count;
            break;
        case R.id.green_seekbar:
            this.green_vactor = count;
            break;
        case R.id.blue_seekbar:
            this.blue_vactor = count;
            break;
        default:
            break;
        }
        //主体代码
        //1.拿到原图
        baseBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pre);
        //2.拿到一张与原图一样大小的纸
        copyBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), baseBitmap.getConfig());
        //3.把画纸固定在画板上
        canvas = new Canvas(copyBitmap);
        //4.拿到画笔
        paint = new Paint();
        //vactor的取值范围0-2
        float[] colors = new float[]{
            red_vactor ,0 ,0 ,0 ,0,   
            0 ,green_vactor ,0 ,0 ,0,   
            0 ,0 ,blue_vactor ,0 ,0,   
            0 ,0 ,0 ,1 ,0
        };
        //5.给画笔设置颜色过滤器
        paint.setColorFilter(new ColorMatrixColorFilter(colors));
        //6.处理规则
        Matrix matrix = new Matrix();
        //7.照着原图画
        canvas.drawBitmap(baseBitmap, matrix, paint);
        //8.把画好的图显示在ImageView组件上
        iv.setImageBitmap(copyBitmap);
    }
}

© 著作权归作者所有

共有 人打赏支持
Mr_Nice
粉丝 0
博文 47
码字总数 39947
作品 0
广州
[Android学习笔记九] Android 开发中图片灰阶(黑白)显示

阅读本文之前关于将RGB颜色值转换为灰阶值的计算方法可参见: 三种算法转换彩色灰阶 http://aiilive.blog.51cto.com/1925756/1718960 灰阶显示图片的典型应用就是用户头像,如用户在线头像显...

secondriver
06/26
0
0
android自学笔记《三》——系统架构分析

下面是Android的系统架构图 翻译后 从上图中可以看出,Android系统架构为4层结构,从上层到下层分别是应用程序层、应用程序框架层、系统运行库层以及Linux内核层,分别介绍如下: 1)应用程序...

郭子
2012/02/03
0
5
android实例源码,渐变图像图片浏览高仿美团!

渐变颜色渐变文字渐变图像GradualshowcolorAndResourse 根据图片高度动态变化的ViewPager android Kotlin开发的一款超简单的图片浏览源码 android多种reveal动画效果 栗子——高仿美团首页分...

莫非有道
2017/11/08
0
0
Android 学习笔记【基础扫盲篇】

前一段时间断断续续的看过几天android,由于不连贯,效果不是很好,最近打算用一个月的时间系统的学习一下。 1、android的生态系统 Android是由Google在2007年推出的一个开源系统平台,主要针...

samuel2012
2012/07/15
0
1
android自学笔记《四》——应用程序结构分析

昨天在帖子里看到的一个分析方法,很简单,给大家分享下! 呵呵,由于我也是刚开始学习Android,还没有学到下面这些知识,这里就直接截图了。 看完他这个分析之后,我对Android程序有了一个简...

郭子
2012/02/03
0
1
Android开发优化之——对界面UI的优化(1)

在Android应用开发过程中,屏幕上控件的布局代码和程序的逻辑代码通常是分开的。界面的布局代码是放在一个独立的xml文件中的,这个文件里面是树型组织的,控制着页面的布局。通常,在这个页面...

KingMing
2015/04/03
0
0
让TextView显示的文字一跑马灯显示属性设置

<TextView 一定要设置单行显示 android:singleLine="true" , android:ellipsize="marquee"就是跑马灯属性,android:marqueeRepeatLimit="marquee_forever"为一直都是滚动模式 Activity里面还......

放纵的青春
2015/07/03
0
0
提升应用视觉Android效果的10个UI技巧

在Android应用开发中,风格和设计或许不是最关键的要素,但它们在决定Android应用成功与否上确实扮演重要的角色。以下是10个Android应用的UI设计技巧,还有个附加技巧,能够提供你的Android...

任洪君
2012/02/22
0
0
Android 第一课——Android架构

声明:本文是学习Android时从《Android 4编程入门经典》摘抄!仅仅是作为复习时查看的笔记! 1 Android是一个linux系统 Android 是一个基于 Linux 的开源的手机操作系统。它可以供任何打算使...

learn_more
2014/12/28
0
0
Android:TextView属性大全

android:autoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all) android:autoText 如果设置,将自动执行输入值的拼写纠正...

Xushao
2013/04/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

看看 LinkedList Java 9

终于迎来了 LinkedList 类,实现的接口就有点多了 Serializable, Cloneable, Iterable<E>, Collection<E>, Deque<E>, List<E>, Queue<E>。LinkedList是一个实现了List接口和Deque接口的双端链......

woshixin
21分钟前
0
0
算法 - 冒泡排序 C++

大家好,我是ChungZH。今天我给大家讲一下最基础的排序算法:冒泡排序(BubbleSort)。 冒泡排序算法的原理如下: 比较相邻的元素。如果第一个比第二个大(可以相反),就交换他们两个。 对每...

ChungZH
23分钟前
0
0
jquery ajax request payload和fromData请求方式

请求头的不同 fromData var data = { name : 'yiifaa'};// 提交数据$.ajax('app/', { method:'POST', // 将数据编码为表单模式 contentType:'application/x-ww...

lsy999
26分钟前
0
0
阿里P7架构师,带你点亮程序员蜕变之路

前言: Java是现阶段中国互联网公司中,覆盖度最广的研发语言。 掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地。 有不少朋友问,成为Java架...

Java大蜗牛
27分钟前
1
0
Ecstore 在没有后台管理界面(维护)的情况如何更新表的字段

window 系统: 切换到:app\base 目录下: C:\Users\qimh>d: D:\>cd D:\WWW\huaqh\app\base 执行:D:\WWW\huaqh\app\base>cmd update linux 系统: 1># cd /alidata/www.novoeshop.com/app/......

qimh
32分钟前
0
0
设计模式-策略模式

策略模式 解释 对工厂模式的再次封装,使用参数控制上下文信息(将工厂返回的实例赋值给context field) 不会返回bean实例,只是设置对应的条件 调用context的方法(调用field的方法) 用户只...

郭里奥
34分钟前
0
0
python使用有序字典

python自带的collections包中有很多有用的数据结构可供使用,其中有个叫OrderedDict类,它可以在使用的时候记录元素插入顺序,在遍历使用的时候就可以按照原顺序遍历。 a = {"a":1,"b"...

芝麻糖人
今天
0
0
RestTemplate HttpMessageConverter

RestTemplate 微信接口 text/plain HttpMessageConverter

微小宝
今天
0
0
mysql视图/存储过程/函数/事件/触发器

--语法参考:https://dev.mysql.com/doc/ (当前用的是5.6) https://dev.mysql.com/doc/refman/5.6/en/sql-syntax-data-manipulation.html --视图 CREATE VIEW test.v AS SELECT * FROM t;......

坦途abc
今天
0
0
MySQL参数优化案例

环境介绍 硬件配置 cpu核心数 内存大小 磁盘空间 16核 256G 3T 软件环境 操作系统版本 mysql版本 表数目 单表行数 centos-7.4 mysql-5.7.22 128张表 2kw行 优化层级与指导思想 优化层级 MySQ...

小致dad
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部