[关闭]
@coder-pig 2015-10-28T15:32:26.000000Z 字数 2738 阅读 1548

Android基础入门教程——8.3.10 Paint API之—— ColorFilter(颜色过滤器)(2-3)

未分类


本节引言:

上一节中我们讲解了Android中Paint API中的ColorFilter(颜色过滤器)的第一个子类:
ColorMatrixColorFilter(颜色矩阵颜色过滤器),相信又开阔了大家的Android图像处理视野,
而本节我们来研究它的第二个子类:LightingColorFilter(光照色彩颜色过滤器),先上一发
官方API文档:LightingColorFilter,文档里的东西也不多,关键的在这里:

大概意思就是:一个颜色过滤器,可以用来模拟简单的灯光效果,构造方法的参数有两个,一个
用来乘以原图的RPG值,一个添加到前面得出的结果上!其实计算方法无非:
(RGB值 * mul + Add) % 255,从而得到新的RPG值,这里的%是求余,另外,整个过程中Alpha不
参与改变!下面我们写个示例来验证验证!


1.代码示例:

运行效果图

实现代码

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

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:padding="5dp"
  6. tools:context=".MainActivity">
  7. <ImageView
  8. android:id="@+id/img_meizi"
  9. android:layout_width="300dp"
  10. android:layout_height="300dp"
  11. android:src="@mipmap/img_meizi" />
  12. <EditText
  13. android:id="@+id/edit_mul"
  14. android:layout_width="wrap_content"
  15. android:layout_height="wrap_content"
  16. android:layout_below="@id/img_meizi"
  17. android:text="0" />
  18. <EditText
  19. android:id="@+id/edit_add"
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"
  22. android:layout_below="@id/edit_mul"
  23. android:text="0" />
  24. <Button
  25. android:id="@+id/btn_change"
  26. android:layout_width="wrap_content"
  27. android:layout_height="wrap_content"
  28. android:layout_alignRight="@id/img_meizi"
  29. android:layout_below="@id/img_meizi"
  30. android:text="变化" />
  31. </RelativeLayout>

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

  1. public class MainActivity extends AppCompatActivity implements View.OnClickListener{
  2. private ImageView img_meizi;
  3. private EditText edit_mul;
  4. private EditText edit_add;
  5. private Button btn_change;
  6. private Bitmap mBitmap;
  7. @Override
  8. protected void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.activity_main);
  11. mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.img_meizi);
  12. bindViews();
  13. }
  14. private void bindViews() {
  15. img_meizi = (ImageView) findViewById(R.id.img_meizi);
  16. edit_mul = (EditText) findViewById(R.id.edit_mul);
  17. edit_add = (EditText) findViewById(R.id.edit_add);
  18. btn_change = (Button) findViewById(R.id.btn_change);
  19. btn_change.setOnClickListener(this);
  20. }
  21. private Bitmap ProcessImage(Bitmap bp,int mul,int add){
  22. Bitmap bitmap = Bitmap.createBitmap(bp.getWidth(),bp.getHeight(), Bitmap.Config.ARGB_8888);
  23. Canvas canvas = new Canvas(bitmap);
  24. Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
  25. paint.setColorFilter(new LightingColorFilter(mul,add));
  26. canvas.drawBitmap(bp,0,0,paint);
  27. return bitmap;
  28. }
  29. @Override
  30. public void onClick(View v) {
  31. switch (v.getId()){
  32. case R.id.btn_change:
  33. int mul = Integer.parseInt(edit_mul.getText().toString());
  34. int add = Integer.parseInt(edit_add.getText().toString());
  35. img_meizi.setImageBitmap(ProcessImage(mBitmap,mul,add));
  36. break;
  37. }
  38. }
  39. }

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


3.本节代码下载

LightingColorFilterDemo.zip


本节小结:

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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注