-1
以下のヘルパー関数は、入力ビットマップの上に矩形を描き、サムネイルのビットマップを返します。しかし、サムネイルのリストを作成するためにアクティビティからこのヘルパーを約1000回呼び出すと、JavaのOutOfMemoryエラーが発生します。 tempScaledBitmapのサイズを375,500に変更しようとしましたが、サムネイル画像の品質が悪いです。Android:画像を効率的に描画する
また、私はinputBitmapをそのまま変更することができませんでした。 アクティビティに1000プラスサムネイルのリストを表示する効率的な方法は何ですか?
private static Bitmap drawOnCanvas(Bitmap inputBitmap, FramePoint[] points, ColorCode colorCode){
Bitmap tempScaledBitmap = Bitmap.createScaledBitmap(inputBitmap, 750, 1000, false);
//draw path
Canvas canvas = new Canvas(tempScaledBitmap);
// Path
Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setColor(colorCode.equals(ColorCode.GREEN)?Color.GREEN:(colorCode.equals(ColorCode.RED)?Color.RED:Color.BLUE));
paint.setStrokeWidth(5);
Path p = new Path();
p.moveTo(points[0].getPointX(), points[0].getPointY());
p.lineTo(points[1].getPointX(), points[1].getPointY());
p.lineTo(points[2].getPointX(), points[2].getPointY());
p.lineTo(points[3].getPointX(), points[3].getPointY());
p.close();
canvas.drawPath(p, paint);
return tempScaledBitmap;
}
私はリサイクルがイメージの解放/削除と同等であることを確認します。しかし、私は両方の画像、入力画像とtempScaledImageの両方を描画する必要があります。 –
しかし、1000枚の画像をメモリに保存することはできません。次のサムネイルを読み込む前に、各サムネイルを解放する必要があります。ピカソやグライドのようなライブラリを使うことを考えましたか?あなたの最善の選択肢かもしれませんし、最適化されています。 – jeprubio