我有一个从相机拍摄的位图。我想裁剪图像,使其仅留在图像的底部。裁剪后的图像应比原始位图的高度少80%,因此我只希望底部的20%从左边缘开始。

我在代码中明确地执行了此操作,而没有任何Android裁剪 Intent 。

一张图像以可视化我想要实现的目标:

android - 以编程方式裁剪位图的底部-LMLPHP

通过使用以下代码,我设法裁剪了位图的顶部:

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%)

10-07 19:16
查看更多