2017-08-06 12 views
0

キャンバスに何かを描画して大きな画像に保存するなどの要件があります。現時点でonDraw()メソッド内に描画して保存するものは、デバイス提供のイメージ/キャンバスサイズ、つまり538(w)/ 852(h)付近のものを指定します。私は解像度を失うことなく、およそ2倍のサイズ、約1000(w)/ 1500(h)のイメージが必要です。どのサンプルコード、リファレンスリンクも間違いなく役立ちます。前もって感謝します。キャンバスに描画して大きな画像に保存する

答えて

0

1つの方法は、所望の大きさのビットマップを作成し、キャンバスを使用して、その上に描画することです:

int w = 1000, h = 1500; 
Bitmap.Config conf = Bitmap.Config.ARGB_8888; 
Bitmap bmp = Bitmap.createBitmap(w, h, conf); 
Canvas canvas = new Canvas(bmp); 

最後に、あなたはあなたの図面や必要なdimentionsとBMPています。

EDIT ::

@Override 
protected void onDraw(Canvas canvas) { 
    int w = 1000, h = 1500; 
    Bitmap.Config conf = Bitmap.Config.ARGB_8888; 
    Bitmap bmp = Bitmap.createBitmap(w, h, conf); 
    Canvas mycanvas = new Canvas(bmp); 
    super.onDraw(mycanvas); 

    ... 
} 
+0

私はonDraw(Canvas c)内のすべてをやっています。それを大きな画像に保存するには?提供されたコードを使用して再描画して保存する必要がありますか? – dask

+0

この場合、現在のキャンバスを親Viewクラスからリンク解除し、作成したビットマップを必要なサイズでリンクすることができます。 –

0

まず、あなたの要件に応じてビットマップを拡大、機能getDrawingCache()を使用して、ビューのビットマップを取得します。

view.buildDrawingCache(); 
Bitmap bitmap = view.getDrawingCache(); 
//bitmap = bitmap.createScaledBitmap(..as your requirements..); 

EDIT

あなたはより高品質の画像が欲しいと言っています。低品質の画像から高品質の画像を取得することは簡単ではありません。ただし、ビットマップ・フィルタリングを適用して、やや良い品質を得ることができます。

Bitmap bitmap = getDrawingCache(); 
Bitmap output = Bitmap.createBitmap(/*width, height, bla bla bla*/); 
Canvas canvas = new Canvas(output); 
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG); 
Rect srcRect = new Rect(0,0,bitmap.getWidth(), bitmap.getHeight()); 
Rect destRect = new Rect(0,0,output.getWidth(), output.getHeight()); 
canvas.drawBitmap(bitmap, srcRect, destRect, paint); 
+0

スケーリングビットマップで解像度が失われますか?ギャラリー、画像ビューアなどの他のサードパーティのツールからこの画像がズームインされても、私の要件は「良い解像度」を得ることです。 – dask

+0

@dask check edited answer。 –

関連する問題