Android's Paint API - ColorFilter (color filter) (2-3)

Introduction to this section:

In the previous section, we explained  the first subclass of ColorFilter (color filter)  in Paint API in Android: ColorMatrixColorFilter (color matrix color filter), which I believe has broadened everyone's vision of Android image processing, and in this section we Let's study its second subclass: LightingColorFilter (lighting color color filter), first post the official API document: LightingColorFilter , there are not many things in the document, the key is here:

The general meaning is: a color filter, which can be used to simulate simple lighting effects. There are two parameters in the construction method, one is used to multiply the RPG value of the original image, and the other is added to the previous result! In fact, the calculation method is nothing more than:  (RGB value * mul + Add) % 255 to get the new RPG value. The % here is the remainder. In addition, Alpha does not participate in the change during the whole process! Let's write an example to verify the verification below!


1. Code example:

Running effect diagram :

Implementation code :

First a simple layout: activity_main.xml :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="5dp"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/img_meizi"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:src="@mipmap/img_meizi" />

    <EditText
        android:id="@+id/edit_mul"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/img_meizi"
        android:text="0" />

    <EditText
        android:id="@+id/edit_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/edit_mul"
        android:text="0" />


    <Button
        android:id="@+id/btn_change"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@id/img_meizi"
        android:layout_below="@id/img_meizi"
        android:text="变化" />

</RelativeLayout>

Then there is our MainActivity.java , which is also very simple:

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.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; 
        } 
    } 
}

Ok, the demo of LightingColorFilter is over~

Guess you like

Origin blog.csdn.net/leyang0910/article/details/131771088