キャンバス上でアプリを開発しようとしています。キャンバス上にビットマップを描画しています。描画後、ビットマップ画像に変換しようとしています。
誰かが私に提案を与えることができますか?
キャンバス上でアプリを開発しようとしています。キャンバス上にビットマップを描画しています。描画後、ビットマップ画像に変換しようとしています。
誰かが私に提案を与えることができますか?
アドバイスはあなたがやろうとしていることに依存します。
コントロールの描画に時間がかかることが心配で、キャンバスを介して再描画するのではなく、ビットマップをブリットできるようにビットマップに描画したい場合は、プラットフォームを二重に推測する必要はありません。 -コントロールは、描画を一時的なビットマップに自動的にキャッシュします。これらは、を使用してコントロールからフェッチすることもできます。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());