当在画布中绘制时如何调整位图大小?

9
在我的安卓应用程序中,我有这个功能,通过画布从旧位图创建一个新的位图。
private static Bitmap convert(Bitmap bitmap, Bitmap.Config config, int width, int height) {
    Bitmap convertedBitmap = Bitmap.createBitmap(width, height, config);
    Canvas canvas = new Canvas(convertedBitmap);
    Paint paint = new Paint();
    paint.setColor(Color.BLACK);
    canvas.drawBitmap(bitmap, 0, 0, paint);
    bitmap.recycle();
    return convertedBitmap;
}

问题在于当我将旧位图绘制到画布上时,由于旧位图的尺寸比画布大,因此只有位图的左上部分被绘制在画布上。有没有办法让它在将位图绘制到画布上时,对位图进行缩放,使其完全适合画布?
我不想使用createScaledBitmap来调整位图大小。是否有更快的方法?
或者我可以使用createScaledBitmap同时使其可变吗?这就是我试图做的事情,同时调整大小和使其可变。
谢谢
1个回答

16

您可以调用此函数(Android文档):public void drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint paint)。下面的代码应该能够实现您想要做的:

canvas.drawBitmap(bitmap, null, new RectF(0, 0, canvasWidth, canvasHeight), null);

RectF参数需要左、上、右和下的x、y索引。那么canvasWidth-1和canvasHeight-1不就是这些索引吗? - omega
把它想象成你的计算机显示器:假设它是FHD(1920x1080),当你想要填满整个屏幕时,你应该从(0, 0)到(1920, 1080)而不是从(0, 0)到(1919, 1079),这里的逻辑是相同的。 - Kai
但是这假定逻辑所在的地方已经到了,但不包括那个长度。但是新的 RectF 文档说 参数: left 矩形左侧的 X 坐标 top 矩形顶部的 Y 坐标 right 矩形右侧的 X 坐标 bottom 矩形底部的 Y 坐标 - omega
它说“在绘制/布局操作期间避免对象分配(预先分配和重复使用)”。我该如何消除这个错误? - Muhammed Aydogan
@Kai,我按照@Alex248在这里的建议,将createScaledBitmap方法放到onSizeChanged方法中。https://stackoverflow.com/a/17087449/10908886 - Muhammed Aydogan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接