• 安卓图像处理入门教程


    第1章 图像处理概念介绍

    1、RGBA模型分析

    RGB:red,green,blue,alpha
    色相:物体传递的颜色
    饱和度:颜色的灰度,从0(灰)-100%
    

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

    ColorMatrix
    setRotate()
    setSaturation()
    setScale()
    postConcat()

    第2章 颜色矩阵变换与实例

    图片中矩阵的作用通常用于初始化颜色矩阵
    这里写图片描述

    第3章 像素点分析与实例

    1.使用getPixels()方法可获取图片的所有点的颜色值,一般采用以下格式:bitmap.getPixels(int[] ,0,width,0,0,width,height)。
    参数说明:存放像素值的数组->最开始读取像素时的偏移量->行距(多少算作一行,一般去width)->(x,y)第一次读取参数的目标->要读取像素的长度->要读取像素的宽度

    2.获取所有点的颜色值后,想对像素点进行操作,则需要一Color。red(color)方法读取R分量,G、B、Alpha分量类似。此处的color为之前存放在数组里的颜色值

    3.处理RGB值之后,还需检查其是否依旧在(0,255)范围内

    4.使用方法newPx[i] = Color.argb(a, r, g, b);将新的RGB值创造新的颜色值

    5.使用bmp.setPixels(newPx, 0, width, 0, 0, width, height);将颜色值应用到图片上,返回图片

      r = Color.red(color);
            g = Color.green(color);
            b = Color.blue(color);
            a = Color.alpha(color);
    

    底片

    r = 255 - r;
    g = 255 - g;
    b = 255 - b;
    

    老照片

    r1 = (int) (0.393 * r + 0.769 * g + 0.189 * b);
            g1 = (int) (0.349 * r + 0.686 * g + 0.168 * b);
            b1 = (int) (0.272 * r + 0.534 * g + 0.131 * b);
    

    浮雕

     r = (r - r1 + 127);
        g = (g - g1 + 127);
        b = (b - b1 + 127);
    

    ImageHelper工具类

    public class ImageHelper {
    public static Bitmap handleImageEffect(Bitmap bm, float hue, float saturation, float lum) {
        Bitmap bmp=Bitmap.createBitmap(bm.getWidth(),bm.getHeight(),Bitmap.Config.ARGB_8888);
        Canvas canvas=new Canvas(bmp);
        Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG);
    
        ColorMatrix hueMatrix=new ColorMatrix();
        hueMatrix.setRotate(0,hue);
        hueMatrix.setRotate(1, hue);
        hueMatrix.setRotate(2, hue);
    
        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(bm,0,0,paint);
    
        return bmp;
    }
    public static Bitmap handleImageNegative(Bitmap bm){
        int width = bm.getWidth();
        int height = bm.getHeight();
        int color;
        int r, g, b, a;
    
        Bitmap bmp = Bitmap.createBitmap(width, height
                , Bitmap.Config.ARGB_8888);
    
        int[] oldPx = new int[width * height];
        int[] newPx = new int[width * height];
        bm.getPixels(oldPx, 0, width, 0, 0, width, height);
    
        for (int i = 0; i < width * height; i++) {
            color = oldPx[i];
            r = Color.red(color);
            g = Color.green(color);
            b = Color.blue(color);
            a = Color.alpha(color);
    
            r = 255 - r;
            g = 255 - g;
            b = 255 - b;
    
            if (r > 255) {
                r = 255;
            } else if (r < 0) {
                r = 0;
            }
            if (g > 255) {
                g = 255;
            } else if (g < 0) {
                g = 0;
            }
            if (b > 255) {
                b = 255;
            } else if (b < 0) {
                b = 0;
            }
            newPx[i] = Color.argb(a, r, g, b);
        }
        bmp.setPixels(newPx, 0, width, 0, 0, width, height);
        return bmp;
    }
    
    public static Bitmap handleImagePixelsoldPhoto(Bitmap bm) {
        Bitmap bmp = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(),
                Bitmap.Config.ARGB_8888);
        int width = bm.getWidth();
        int height = bm.getHeight();
        int color = 0;
        int r, g, b, a, r1, g1, b1;
    
        int[] oldPx = new int[width * height];
        int[] newPx = new int[width * height];
    
        bm.getPixels(oldPx, 0, bm.getWidth(), 0, 0, width, height);
        for (int i = 0; i < width * height; i++) {
            color = oldPx[i];
            a = Color.alpha(color);
            r = Color.red(color);
            g = Color.green(color);
            b = Color.blue(color);
    
            r1 = (int) (0.393 * r + 0.769 * g + 0.189 * b);
            g1 = (int) (0.349 * r + 0.686 * g + 0.168 * b);
            b1 = (int) (0.272 * r + 0.534 * g + 0.131 * b);
    
            if (r1 > 255) {
                r1 = 255;
            }
            if (g1 > 255) {
                g1 = 255;
            }
            if (b1 > 255) {
                b1 = 255;
            }
    
            newPx[i] = Color.argb(a, r1, g1, b1);
        }
        bmp.setPixels(newPx, 0, width, 0, 0, width, height);
        return bmp;
    }
    
    public static Bitmap handleImagePixelsRelief(Bitmap bm) {
    Bitmap bmp = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(),
            Bitmap.Config.ARGB_8888);
    int width = bm.getWidth();
    int height = bm.getHeight();
    int color = 0, colorBefore = 0;
    int a, r, g, b;
    int r1, g1, b1;
    
    int[] oldPx = new int[width * height];
    int[] newPx = new int[width * height];
    
    bm.getPixels(oldPx, 0, bm.getWidth(), 0, 0, width, height);
    for (int i = 1; i < width * height; i++) {
        colorBefore = oldPx[i - 1];
        a = Color.alpha(colorBefore);
        r = Color.red(colorBefore);
        g = Color.green(colorBefore);
        b = Color.blue(colorBefore);
    
        color = oldPx[i];
        r1 = Color.red(color);
        g1 = Color.green(color);
        b1 = Color.blue(color);
    
        r = (r - r1 + 127);
        g = (g - g1 + 127);
        b = (b - b1 + 127);
        if (r > 255) {
            r = 255;
        }
        if (g > 255) {
            g = 255;
        }
        if (b > 255) {
            b = 255;
        }
        newPx[i] = Color.argb(a, r, g, b);
    }
    bmp.setPixels(newPx, 0, width, 0, 0, width, height);
    return bmp;
    }
    }
    
  • 相关阅读:
    ubuntu装openssh-client和openssh-server
    路由器开源系统openwrt配置页面定制
    linux 串口接收
    SHA算法
    密码学Hash函数
    椭圆曲线加密
    ElGamal密码
    Diffie-Hellman密钥交换
    RSA加密
    公钥密码学
  • 原文地址:https://www.cnblogs.com/sdksdk0/p/5585091.html
Copyright © 2020-2023  润新知