Android LightingColorFilter 光照色彩颜色滤镜

Android 光照色彩颜色滤镜 ( LightingColorFilter) 可用于模拟简单照明效果的滤色器

LightingColorFilter(int mul, int add)
参数 说明
mul 用来乘以原图的 RPG 值
add 添加到前面得出的结果上

计算方法

(RGB 值 * mul + Add) % 255

从而得到新的 RPG 值,这里的 % 是求余

另外,整个过程中 Alpha 不参与改变

简单的照明效果


  1. 创建一个 空的 Android 项目 cn.twle.android.LightingColor

  2. 下载 /static/i/meimei_160x360.jpg 放到 res/drawable 目录

  3. 修改 activity_main.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
    
            <EditText
                android:id="@+id/edit_mul"
                android:inputType="number"
                android:layout_width="120dp"
                android:layout_height="wrap_content"
                android:text="0" />
    
            <EditText
                android:id="@+id/edit_add"
                android:inputType="number"
                android:layout_width="120dp"
                android:layout_height="wrap_content"
                android:text="0" />
    
            <Button
                android:id="@+id/btn_change"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="变化" />
        </LinearLayout>
    
        <ImageView
            android:id="@+id/img_meizi"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/meimei_160x360" />
    </LinearLayout>
    
  4. 修改 MainActiivty.java

    package cn.twle.android.lightingcolor;
    
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.LightingColorFilter;
    import android.graphics.Paint;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageView;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    
        private ImageView img_meizi;
        private EditText edit_mul;
        private EditText edit_add;
        private Button btn_change;
        private Bitmap mBitmap;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.meimei_160x360);
            bindViews();
        }
    
        private void bindViews() {
            img_meizi = (ImageView) findViewById(R.id.img_meizi);
            edit_mul = (EditText) findViewById(R.id.edit_mul);
            edit_add = (EditText) findViewById(R.id.edit_add);
            btn_change = (Button) findViewById(R.id.btn_change);
    
            btn_change.setOnClickListener(this);
    
        }
    
        private Bitmap ProcessImage(Bitmap bp,int mul,int add){
            Bitmap bitmap = Bitmap.createBitmap(bp.getWidth(),bp.getHeight(), Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(bitmap);
            Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
            paint.setColorFilter(new LightingColorFilter(mul,add));
            canvas.drawBitmap(bp,0,0,paint);
            return bitmap;
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_change:
                    int mul = Integer.parseInt(edit_mul.getText().toString());
                    int add = Integer.parseInt(edit_add.getText().toString());
                    img_meizi.setImageBitmap(ProcessImage(mBitmap,mul,add));
                    break;
            }
        }
    }
    

参考文档

  1. 官方API文档: LightingColorFilter

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.