web-dev-qa-db-ja.com

androidでキャンバスをビットマップ画像に変換する

キャンバスでアプリを開発しようとしています。キャンバスにビットマップを描画しています。描画後、ビットマップ画像に変換しようとしています。

誰でも私に提案をすることができます。

前もって感謝します。

47
satyam

アドバイスはあなたが何をしようとしているかに依存します。

コントロールの描画に時間がかかることが心配で、キャンバスを介して再描画するのではなくビットマップをブリットできるようにビットマップに描画する場合は、don ' tプラットフォームを二重推測したい-コントロールは図面を一時的なビットマップに自動的にキャッシュし、 getDrawingCache()を使用してコントロールから取得することもできます

キャンバスを使用してビットマップに描画する場合、通常のレシピは次のとおりです。

  1. Bitmap.createBitmap() を使用して正しいサイズのビットマップを作成します
  2. Canvas(Bitmap) コンストラクターを使用して、このビットマップを指すキャンバスインスタンスを作成します
  3. キャンバスに描く
  4. ビットマップを使用する
69
Will

そのため、たとえば次のように新しいBitmapを作成します。

Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 )

widthheightはキャンバスと同じです。

次に、canvas.setBitmap(myBitmap)ではなくdrawBitmap()を使用します。

setBitmapを呼び出した後、実際にキャンバスに描画するのは、実際にmyBitmapに描画することです。

編集

次のようなビットマップを直接作成することはできません。

Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 );

代わりに使用する必要があります:

Bitmap myBitmap = Bitmap.createBitmap( (int)Width, (int)Height, Config.RGB_565 );
21
i_Am

他の例:

public Bitmap getBitmapNews(int item , boolean selected, int numbernews){                   
        Bitmap bitmap;

        if(selected)
            bitmap=mBitmapDown[item].copy(Config.ARGB_8888, true);
        else 
            bitmap=mBitmapUp[item].copy(Config.ARGB_8888, true);

        Canvas canvas = new Canvas(bitmap);

        if(numbernews<10){
        canvas.drawBitmap(mNotiNews[numbernews],0,0,null);
        }else{
            canvas.drawBitmap(mNotiNews[0],0,0,null);
        }

 return bitmap; 
}
2
Campino

次に、キャンバスからビットマップに変換し、ギャラリーまたは特定のフォルダーに保存する手順を示します。

注: WRITE_EXTERNAL_STORAGE の許可を与えていることを確認してください

activity_main.xml

            <LinearLayout
                Android:id="@+id/linearLayout"
                Android:orientation="horizontal"
                Android:layout_margin="10dp"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content">

                <DrawingView
                    Android:id="@+id/drawingView"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"/>

            </LinearLayout>

MainActivity.Java

  1. 親レイアウトの参照を作成

    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
    
  2. ギャラリーに保存するには

    final String imagename = UUID.randomUUID().toString() + ".png";
    MediaStore.Images.Media.insertImage(getContentResolver(), linearLayout .getDrawingCache(), imagename, "drawing");
    
  3. ビットマップに変換するには

    linearLayout.setDrawingCacheEnabled(true);
    linearLayout.buildDrawingCache();
    Bitmap bitmap = Bitmap.createBitmap(linearLayout.getDrawingCache());
    
1
Pankaj Lilan