0

我想绘制保存到数据对象的 2000 个点。

我使用以下代码:

Bitmap bitmap = Bitmap.createBitmap(2000,100,Config.ARGB_8888);
Canvas canvasTemp=new Canvas(bitmap);
Paint paint=new Paint();
for (int i = 0; i < 2000; i++) {
canvasTemp.drawPoint(i, data.getData(i), paint);
}
   Matrix matrix = new Matrix(); 
    float scaleWidth = ((float) 640 / 2000);   
float scaleHeight = ((float) 480/ 100);   
matrix.postScale(scaleWidth, scaleHeight);   
 Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0,2000, 100, matrix, true);   
canvas.drawBitmap(newbmp, 0, 0, new Paint());

这个绘图速度太慢了。它需要大约 5 或 6 秒。

如何让绘图速度更快?

4

1 回答 1

1

为什么不直接在画布上作画?它可以节省您创建两个(大)位图:

Paint paint=new Paint();
Matrix matrix = new Matrix(); 
float scaleWidth = ((float) 640 / 2000);   
float scaleHeight = ((float) 480/ 100);   
matrix.postScale(scaleWidth, scaleHeight);   
canvast.concat(matrix);
for (int i = 0; i < 2000; i++) {
  canvas.drawPoint(i, data.getData(i), paint);
}

只需用于concat()缩放画布的绘制命令。

附加说明:不建议在 a 的 draw 方法中创建新对象( paint, matrix, 两个大!位图) 。View它会导致大量实例创建/删除,从而导致更频繁地激活垃圾收集器 (GC),从而导致应用程序出现(巨大的)性能问题!

相反,在你的构造函数中创建一次paintandmatrix对象View

于 2013-01-28T09:40:50.137 回答