zoukankan      html  css  js  c++  java
  • Android 调节图片工具类

    package com.base.changeimage;
    
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.ColorMatrix;
    import android.graphics.ColorMatrixColorFilter;
    import android.graphics.Paint;
    
    /**
     * 调节图片工具类
     */
    public class ImageHelper  {
    
        /**
         * 调节图像
         * @param bm 图像
         * @param hue 色调
         * @param stauration 饱和度
         * @param lum 亮度
         * @return
         */
        public static Bitmap handleImageEffect(Bitmap bm, float hue, float stauration, 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(stauration);
    
            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;
        }
    
        /**
         * 底片效果
         * @param bm
         * @return
         */
        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;
        }
    
        /**
         * 黑白效果
         * @param bm
         * @return
         */
        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;
        }
    
        /**
         * 浮雕效果
         * @param bm
         * @return
         */
        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;
        }
    }
    

      

  • 相关阅读:
    Centos 6下使用cmake编译安装MariaDB
    mysql索引
    mysql基础指令知识
    git/github安装与使用教程
    Linux目录结构详解
    static关键字的作用(修饰类、方法、变量、静态块)
    Java中重载(overloading)和重写(Overriding)的区别
    @PropertySources和@ImportReSources注解
    @ConfigurationProperties注解和@Value注解的区别
    Java中数组的定义,初始化和使用
  • 原文地址:https://www.cnblogs.com/zyandroid/p/5336948.html
Copyright © 2011-2022 走看看