从特定高度开始裁剪位图(IllegalArgumentException)

时间:2018-12-08 19:46:33

标签: java android bitmap

我的应用程序中有一个带有正方形预览的相机,该预览不是真正的正方形-可以适合整个屏幕,但是有一个叠加层(相机工具栏)使它看起来像正方形。拍摄图像时,我希望它获取图像中预览中显示的正方形,而不是完整预览。

我找到了一种将位图裁剪为正方形的方法:

private static Bitmap cropToSquare(Bitmap bitmap) {
    int width  = bitmap.getWidth();
    int height = bitmap.getHeight();
    int newWidth = (height > width) ? width : height;
    int newHeight = (height > width)? height - ( height - width) : height;

    int cropW = (width - height) / 2;
    cropW = (cropW < 0)? 0: cropW;
    int cropH = (height - width) / 2;
    cropH = (cropH < 0)? 0: cropH;

    return Bitmap.createBitmap(bitmap, cropW, cropH, newWidth, newHeight, matrix, true);
  }

此问题是,它会从预览的底部(用户看不到)开始生成正方形图像。我希望它从相机工具栏的顶部开始,因为这是预览的开始位置。假设我们有一个高度cameraToolbarHeight-如何修改该高度以从该高度而不是0开始裁剪?

我知道我使用的createBitmap(....)方法具有x和y参数(在本例中为cropW和cropH),用于开始裁剪,但是我发现每个大于0的值都添加为参数产生错误:

java.lang.IllegalArgumentException: y + height must be <= bitmap.height()

如果我输入一个负数,则表示y不能为负。我的尝试是使用额外的参数int cropHFrom(代表预览叠加层顶部的y坐标)修改上述方法,然后将其传递到createBitmap(...)而不是cropH中(当然我得到上面的错误)。

非常感谢您的帮助。

0 个答案:

没有答案