文档章节

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

Mr_Nice
 Mr_Nice
发布于 2016/05/22 20:02
字数 469
阅读 4
收藏 0

精选30+云产品,助力企业轻松上云!>>>

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-Tips

Android-Tips https://github.com/petercao/Android-Tips 由于本项目面向的群体为初学者,所以列表的知识点以初级为主,资源大多数为中文,如遇到少数无法访问的情况,请自备梯子。 A ADB An...

osc_xl828kzf
2018/06/07
2
0
android开发笔记之多媒体—图形图像处理

——图像的两种分类: 位图 矢量图 ——图像的加载 ——普通图片加载到内存 ——大图片加载到内存 ——图像的操作 主要借助Matrix这个类 在Android中,如果你用Matrix进行过图像处理,那么一...

Mr_Nice
2016/05/22
16
0
[Android学习笔记九] Android 开发中图片灰阶(黑白)显示

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

secondriver
2018/06/26
0
0
分类导航(更新时间:2019.12.9)

以下目录是使用我的博客园备份工具自动生成的,分类可能不准,静待修复 关于工具详情请看我博客首页的置顶,目录过多,还有博客园导出的备份xml文件数据上会欠缺几篇博文(可能是服务器定时更...

osc_2qjd9tjg
2019/01/18
4
0
分类导航(更新时间:2019.12.9)

以下目录是使用我的博客园备份工具自动生成的,分类可能不准,静待修复 关于工具详情请看我博客首页的置顶,目录过多,还有博客园导出的备份xml文件数据上会欠缺几篇博文(可能是服务器定时更...

Stars-one
2019/01/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

我在哪里可以在线找到Android源代码? [关闭] - Where can I find Android source code online? [closed]

问题: Particularly, where can I browse the source code for any android source application(egthe contact application) ? 特别是,我在哪里可以浏览任何Android源应用程序(例如联系人......

javail
38分钟前
17
0
如何以常规格式打印日期? - How to print a date in a regular format?

问题: This is my code: 这是我的代码: import datetimetoday = datetime.date.today()print today This prints: 2008-11-22 which is exactly what I want. 打印: 2008-11-22这正是我......

fyin1314
今天
17
0
动态规划:LC198.打家劫舍

题目描述: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入...

曦鱼violet
今天
30
0
OSChina 周一乱弹 —— 南方水到底多深

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: Various Artists-用印度乐器演奏苏联国歌(洛天侬 remix) 手机党少年们想听歌,请...

小小编辑
今天
56
0
快递100云平台的安全措施--API限流

2、热点参数限流 注意: 若 entry 的时候传入了热点参数,那么 exit 的时候也一定要带上对应的参数(exit(count, args)),否则可能会有统计错误。 3、通过 ParamFlowRuleManager 的 loadRu...

bykk
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部