Android中如何基于RoundRect坐标对拍摄获得的图片进行精确裁剪
换算逻辑
完全不需要缩放原图,直接通过相对比例换算即可,不会损失画质也不会改变长宽比:
- 先获取两个基础尺寸
- 屏幕尺寸:屏幕总宽度
screenWidth、屏幕总高度screenHeight - 拍摄原图尺寸:原Bitmap的宽度
originalBpWidth、原Bitmap的高度originalBpHeight
- 计算界面上圆角矩形区域的相对比例(占屏幕的比例,和绝对像素无关)
- 左边界相对比例:
leftRatio = 0.02(对应屏幕宽度2%的左边距) - 右边界相对比例:
rightRatio = 0.98(对应屏幕宽度2%的右边距) - 上边界相对比例:
topRatio = 0.15(对应屏幕高度15%的上边距) - 下边界相对比例:根据你的圆角矩形实际高度计算,比如你的圆角矩形高宽比为4:3,那么圆角矩形的实际高度为
screenWidth * 0.96 * 4 / 3,对应的下边界相对比例为bottomRatio = 0.15 + (screenWidth * 0.96 * 4 / 3) / screenHeight;如果你的圆角矩形底部边距固定,直接用1 - 底部边距百分比即可。
- 用相对比例换算原图上的裁剪参数
- 裁剪左偏移:
left = (int) (leftRatio * originalBpWidth) - 裁剪上偏移:
top = (int) (topRatio * originalBpHeight) - 裁剪宽度:
cropWidth = (int) ((rightRatio - leftRatio) * originalBpWidth) - 裁剪高度:
cropHeight = (int) ((bottomRatio - topRatio) * originalBpHeight)
- 调用裁剪方法
注意Bitmap.createBitmap的后两个参数是裁剪宽度和高度,不是右、下边界坐标,正确调用方式为:
Bitmap croppedBp = Bitmap.createBitmap(originalBp, left, top, cropWidth, cropHeight);
注意事项
需要确保相机预览的宽高比和拍照输出的照片宽高比完全一致,否则预览界面上的圆角矩形位置和实际照片的内容会有偏移,可在相机初始化时强制设置预览、拍照输出的尺寸为相同宽高比,避免拉伸。
内容的提问来源于stack exchange,提问作者debugger
相关产品推荐
相关产品推荐

