我有一个从相机拍摄的位图。我想裁剪图像,使其仅留在图像的底部。裁剪后的图像应比原始位图的高度少80%,因此我只希望底部的20%从左边缘开始。
我在代码中明确地执行了此操作,而没有任何Android裁剪 Intent 。
一张图像以可视化我想要实现的目标:
通过使用以下代码,我设法裁剪了位图的顶部:
final Bitmap toBeCropped = BitmapFactory.decodeFile(mFile.getPath());
final BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
bitmapOptions.inTargetDensity = 1;
toBeCropped.setDensity(Bitmap.DENSITY_NONE);
int fromHere = (int) (toBeCropped.getHeight() * 0.2);
Bitmap croppedBitmap = Bitmap.createBitmap(toBeCropped, 0, 0, toBeCropped.getWidth(), fromHere);
mPreviewHalf.setImageBitmap(croppedBitmap);
但是我找不到从顶部开始播种80%的方法。我正在考虑获取位图的y坐标,以便可以裁剪任何图像大小并始终仅获取底部。但是谁能指出我如何从位图获得此坐标?还是我必须从布局本身中获取它?
最佳答案
我对位图的操作不熟悉,但是通过检查代码并查看API,我的猜测是您需要在以下行上指定y坐标以匹配起点:
Bitmap croppedBitmap = Bitmap.createBitmap(toBeCropped, 0, "here", toBeCropped.getWidth(), fromHere);
因此,我的猜测将类似于以下内容:
Bitmap croppedBitmap = Bitmap.createBitmap(toBeCropped, 0, (toBeCropped.getHeight() * 0.8), toBeCropped.getWidth(), fromHere);
在这种情况下,
fromHere
将定义您要裁剪的行数而不是起点(如您所指出的,它是总数的20%)