Android 图像处理

本文介绍了Android图像处理的两个主要方面:图像色彩变换和图像图形变换。在色彩变换部分,详细讲解了RGBA模型、色相饱和度亮度的概念,并通过矩阵变化实现底片、黑白和浮雕效果。图形变换部分阐述了平移、旋转、缩放和错切变换,以及如何利用Xfermode和Shader创建独特画笔风格,包括倒影效果。
摘要由CSDN通过智能技术生成

  本文是我在看过eclipse_xu大神的课程之后做的一些笔记,希望可以很好的掌握Android图片处理的相关知识。

一、图像色彩变换

1、RGBA模型和色相、饱和度、亮度

  RGBA是在R(Red)G(Green)B(Blue)模式上增加了alpha通道,alpha通道是不透明度。

  色相/色调:物体传递的颜色

ColorMatrix hueMatrix = new ColorMatrix();
hueMatrix.setRotate(0, hue); //R
hueMatrix.setRotate(1, hue); //G
hueMatrix.setRotate(2, hue); //B


  饱和度:颜色的准度,从0(灰)到100%(饱和)来进行描述

ColorMatrix saturationMatrix = new ColorMatrix();
saturationMatrix.setSaturation(saturation);


  亮度:颜色的相对明暗程度

ColorMatrix lumMatrix = new ColorMatrix();
// 4*5的色彩矩阵,第0、6、12、18位分别对应以下各个数值,分别控制红、绿、蓝和透明度
lumMatrix.setScale(lum, lum, lum, 1);


  在图像处理中,我们可以通过上面几种Android API来调整图片对应的色相、饱和度和亮度。将其封装进一个方法中,方便以后调用。

/**
     * @param bitmap     图像,传进来的bitmap是默认不可修改的,所以要重新创建一个与原图相同大小的Bitmap
     * @param hue        色相
     * @param saturation 饱和度
     * @param lum        亮度
     * @return 返回一张修改后的图片
     */
    public static Bitmap handleImageEffect(Bitmap bitmap, float hue, float saturation, float lum) {
        Bitmap bmp = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);        
        Canvas canvas = new Canvas(bmp);  //拥有一张与我们传进来的Bitmap一样大小的画布,之后的操作都讲在画布上完成
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);  //抗锯齿

        //这里必须要使用三个ColorMatrix,用一个只会有一个调整生效
        ColorMatrix hueMatrix = new ColorMatrix();
        hueMatrix.setRotate(0, hue); //R
        hueMatrix.setRotate(1, hue); //G
        hueMatrix.setRotate(2, hue); //B


        ColorMatrix saturationMatrix = new ColorMatrix();
        saturationMatrix.setSaturation(saturation);

        ColorMatrix lumMatrix = new ColorMatrix();
        lumMatrix.setScale(lum, lum, lum, 1);

        ColorMatrix imageMatrix = new ColorMatrix();
        imageMatrix.postConcat(hueMatrix);
        imageMatrix.postConcat(saturationMatrix);
        imageMatrix.postConcat(lumMatrix);

        paint.setColorFilter(new ColorMatrixColorFilter(imageMatrix));
        canvas.drawBitmap(bitmap, 0, 0, paint);

        return bmp;
    }

2、矩阵变化

  ColorMatrix,Matrix是矩阵的意思。上面我们所做的操作其实也是对颜色矩阵进行处理,使图片展现出各种的变化。

  下图中的初始化矩阵,当它与任何颜色矩阵分量相乘得到的仍然是之前的颜色矩阵分量(像素点),所以它才被当做初始化矩阵。
  
  
  

  如下图所示,如果将左下角的矩阵带入,我们会得到R+100,G+100,B和透明度A不变的一个像素点

  
  

  将第二个矩阵带入,会得到一个R,B,A不变,G*2的像素点

  
  

  
  

  做一个例子,展示矩阵对图片的影响


  
  

3、像素点分析


  通过上面两部分的分析,我们知道ColorMatrix实际上是通过一个特定的矩阵去改变每一个像素点,甚至我们可以为每一个像素点添加不同的修改方法。比如我们在各种图片处理App中经常见到的底片效果、黑白照片、浮雕效果。如下图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值