以编程方式裁剪位图的底部部分

Eme*_*men 7 android

我有一个从相机中取出的位图.我想裁剪图像,使其只留下它的底部.裁剪后的图像应该比原始位图的高度低80%,所以我只希望从左边缘开始的底部的20%.

我在代码中明确地这样做,没有任何Android裁剪意图.

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

裁剪这个

我已经设法使用此代码裁剪位图的顶部:

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);
Run Code Online (Sandbox Code Playgroud)

但我找不到从顶部开始裁剪80%的方法.我正在考虑获取Bitmap的y坐标,这样我就可以裁剪任何图像尺寸,并且只能获得底部部分.但有人能指出我如何从位图获取此坐标?或者我必须从布局本身中取出它?

Har*_*ryS 11

我不熟悉Bitmaps上的操作,但是通过检查代码并查看API,我猜你需要在下一行指定y坐标以匹配起点:

Bitmap croppedBitmap = Bitmap.createBitmap(toBeCropped, 0, "here", toBeCropped.getWidth(), fromHere);
Run Code Online (Sandbox Code Playgroud)

所以我的猜测将如下所示:

Bitmap croppedBitmap = Bitmap.createBitmap(toBeCropped, 0, (toBeCropped.getHeight() * 0.8), toBeCropped.getWidth(), fromHere);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,fromHere将定义要裁剪的行数而不是起点(这是您指出的总数的20%)

  • 没问题,有时你只需要一双新鲜的眼睛.特别是当你花太多时间看它时.一直发生在我身上! (4认同)