キャンバスでアプリを開発しようとしています。キャンバスにビットマップを描画しています。描画後、ビットマップ画像に変換しようとしています。
誰でも私に提案をすることができます。
前もって感謝します。
アドバイスはあなたが何をしようとしているかに依存します。
コントロールの描画に時間がかかることが心配で、キャンバスを介して再描画するのではなくビットマップをブリットできるようにビットマップに描画する場合は、don ' tプラットフォームを二重推測したい-コントロールは図面を一時的なビットマップに自動的にキャッシュし、 getDrawingCache()
を使用してコントロールから取得することもできます
キャンバスを使用してビットマップに描画する場合、通常のレシピは次のとおりです。
Bitmap.createBitmap()
を使用して正しいサイズのビットマップを作成しますCanvas(Bitmap)
コンストラクターを使用して、このビットマップを指すキャンバスインスタンスを作成しますそのため、たとえば次のように新しいBitmap
を作成します。
Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 )
width
とheight
はキャンバスと同じです。
次に、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 );
他の例:
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;
}
次に、キャンバスからビットマップに変換し、ギャラリーまたは特定のフォルダーに保存する手順を示します。
注: 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
親レイアウトの参照を作成
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
ギャラリーに保存するには
final String imagename = UUID.randomUUID().toString() + ".png";
MediaStore.Images.Media.insertImage(getContentResolver(), linearLayout .getDrawingCache(), imagename, "drawing");
ビットマップに変換するには
linearLayout.setDrawingCacheEnabled(true);
linearLayout.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(linearLayout.getDrawingCache());