Android LightingColorFilter 光照色彩颜色滤镜
Android 光照色彩颜色滤镜 ( LightingColorFilter) 可用于模拟简单照明效果的滤色器
LightingColorFilter(int mul, int add)
参数 | 说明 |
---|---|
mul | 用来乘以原图的 RPG 值 |
add | 添加到前面得出的结果上 |
计算方法
(RGB 值 * mul + Add) % 255
从而得到新的 RPG 值,这里的 % 是求余
另外,整个过程中 Alpha 不参与改变
简单的照明效果
-
创建一个 空的 Android 项目
cn.twle.android.LightingColor
-
下载 /static/i/meimei_160x360.jpg 放到
res/drawable
目录 -
修改
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>
-
修改 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; } } }
参考文档
- 官方API文档: LightingColorFilter