AndroidのペイントAPI - ColorFilter(カラーフィルター)(2-3)

このセクションの概要:

前のセクションでは、Android の Paint APIColorFilter (カラー フィルター) の最初のサブクラスである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のデモは終わりました~

おすすめ

転載: blog.csdn.net/leyang0910/article/details/131771088