このセクションの概要:
前のセクションでは、Android の Paint APIのColorFilter (カラー フィルター) の最初のサブクラスであるColorMatrixColorFilter (カラー マトリックス カラー フィルター)について説明しました。 これにより、Android 画像処理に対するみんなの視野が広がったと思います。このセクションでは、そのサブクラスについて学習しましょう。 2 番目のサブクラス: LightingColorFilter (照明色カラー フィルター)。最初に公式 API ドキュメントを投稿します: LightingColorFilter。ドキュメントには多くの内容はありません。キーは次のとおりです。
一般的な意味は: シンプルな照明効果をシミュレートするために使用できるカラー フィルターです。構築方法には 2 つのパラメーターがあり、1 つは元のイメージの RPG 値を乗算するために使用され、もう 1 つは前の結果に追加されます。 !実際、計算方法は次のとおりです: (RGB 値 * mul + 加算) % 255 を使用して新しい RPG 値を取得します。ここでの % は残りです。さらに、Alpha はプロセス全体の変更には関与しません。以下に検証を行うための例を書いてみましょう。
1. コード例:
ランニング効果図:
実装コード:
まず単純なレイアウト: 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" 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>
次に、 MainActivity.javaがあります。これも非常に単純です。
public class MainActivity extends AppCompatActivityimplemented View.OnClickListener{ private ImageView img_meizi; プライベート EditText edit_mul; プライベート EditText edit_add; プライベートボタン btn_change; プライベートビットマップ mBitmap; @Override protected void onCreate(Bundle SavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.img_meizi); バインドビュー(); private void bindingViews() { 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 = (ボタン) 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 = 新しい Canvas(ビットマップ); ペイントペイント = 新しいペイント(Paint.ANTI_ALIAS_FLAG); ペイント.setColorFilter(new LightingColorFilter(mul,add)); Canvas.drawBitmap(bp,0,0,paint); ビットマップを返します。 @ オーバーライド 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)); 壊す; } } }
はい、LightingColorFilterのデモは終わりました~