商城首页欢迎来到中国正版软件门户

您的位置:首页 >8.3.10 Paint API之—— ColorFilter(颜色过滤器)(2-3)

8.3.10 Paint API之—— ColorFilter(颜色过滤器)(2-3)

  发布于2026-08-12 阅读(0)

扫一扫,手机访问

本节引言:

上一节已经聊过 Android 里 Paint APIColorFilter(颜色过滤器)第一个子类:ColorMatrixColorFilter(颜色矩阵颜色过滤器)。这一类东西看着偏底层,真用起来却很能打开 Android 图像处理的思路。顺着这个脉络,这一节继续往下看它的第二个子类:LightingColorFilter(光照色彩颜色过滤器)。先把官方 API 文档摆出来:LightingColorFilter。文档本身内容并不算多,真正需要抓住的重点,其实就在这里:

说白了,这个颜色过滤器做的事并不复杂:它可以拿来模拟一些基础的灯光效果。它的构造参数有两个,一个负责对原图的RPG值做乘法处理,另一个则是在前面结果的基础上再叠加一个值。核心计算逻辑其实就是:(RGB值 * mul + Add) % 255,这样就能得到新的RPG值。这里的%表示求余,另外还有一点别忽略——整个计算过程中,Alpha 是不会发生变化的。接下来不妨写个示例,实际验证一下。

1.代码示例:

运行效果图

实现代码

先是一个简单的布局:activity_main.xml





接着是我们的MainActiivty.ja va,同样很简单:

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 sa vedInstanceState) {
        super.onCreate(sa vedInstanceState);
        setContentView(R.layout.activity_main);
        mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.img_meizi);
        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;
        }
    }
}

好了,LightingColorFilter的使用演示完毕~

3.本节代码下载

LightingColorFilterDemo.zip

本节小结:

嗯,本节演示了一下LightingColorFilter的一个基本用法,用来模拟简单的灯光效果, 实现简单的图片处理效果,好的,本节就到这里,谢谢~

本文转载于:https://www.runoob.com/w3cnote/android-tutorial-colorfilterl2.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注