文档章节

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

Mr_Nice
 Mr_Nice
发布于 2016/05/22 20:02
字数 469
阅读 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 学习笔记【基础扫盲篇】

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

samuel2012
2012/07/15
0
1
android实例源码,渐变图像图片浏览高仿美团!

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

莫非有道
2017/11/08
0
0
android自学笔记《四》——应用程序结构分析

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

郭子
2012/02/03
0
1

没有更多内容

加载失败,请刷新页面

加载更多

白话SpringCloud | 第五章:服务容错保护(Hystrix)

前言 前一章节,我们知道了如何利用RestTemplate+Ribbon和Feign的方式进行服务的调用。在微服务架构中,一个服务可能会调用很多的其他微服务应用,虽然做了多集群部署,但可能还会存在诸如网...

oKong
20分钟前
0
0
【解惑】领略Java内部类的“内部”

内部类有两种情况: (1) 在类中定义一个类(私有内部类,静态内部类) (2) 在方法中定义一个类(局部内部类,匿名内部类) 1、私有内部类 —— 在方法之间定义的内部类,非静态 我们首先看看类中...

偶尔诗文
今天
1
0
sqlserver 2008 r2 直接下载地址(百度云)

之前下载的sqlserver2008发现不能附加,就卸载了,重新找到了sqlserver2008R2的百度云资源 卸载sqlserver2008还是有点麻烦,不过就是需要删除注册表中的信息 自己来回卸载了3次终于重装sqlse...

dillonxiao
今天
1
0
[Java]JVM调优总结 -Xms -Xmx -Xmn -Xss

JVM调优总结 -Xms -Xmx -Xmn -Xss 博客分类: Java General JVM应用服务器电信CMS算法 堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可...

morpheusWB
今天
2
0
C++ std::function 和 std::bind

C++11提供了std::function和std::bind两个工具,用于引用可调用对象。这些可调用对象包括 普通函数,Lambda表达式,类的静态成员函数,非静态成员函数以及仿函数等。引用可调用对象,可以用于...

yepanl
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部