画布中心在public void onDraw(Canvas画布)中的缩放位图

时间:2017-02-09 17:32:07

标签: java canvas bitmap android-canvas

我设法缩放位图。

Rect src = new Rect(0, 0, icon.getWidth() - 1, icon.getHeight() - 1);
Rect dest = new Rect(0,0,Math.round(newWidth), Math.round(newHeight));
canvas.drawBitmap(icon, src, dest, null);

问题是图像显示在画布的左侧。 我希望它在画布的中间。 一个很大的问题是我担心内存管理。所以我不想预先创建一个缩放的位图,我宁愿使用创建和绘制缩放位图的方法:

  canvas.drawBitmap(icon, src, dest, null);

我该怎么做?

1 个答案:

答案 0 :(得分:0)

如果您希望图片以Canvas为中心,只需计算中心坐标并将其应用于dest即可。

int cx = (getWidth() - newWidth) / 2;
int cy = (getHeight() - newHeight) / 2;

Rect src = new Rect(0, 0, myBitmap.getWidth() - 1, myBitmap.getHeight() - 1);
Rect dest = new Rect(cx, cy, cx+Math.round(newWidth), cy+Math.round(newHeight));
canvas.drawBitmap(myBitmap, src, dest, null);

但是,这不是正确的方法,因为每次调用Rect时您都会创建2 onDraw(Canvas)。只要gc垃圾收集它就会留在内存中。

为了避免这种情况,你可以预先计算Rect并存储它们,因为它们不像内存上的Bitmap那么重。