我有一个从相机中取出的位图。我想剪裁图像,使其只留下它的底部。裁剪后的图像应该比原始位图的高度减少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);
但我无法找到从顶部开始裁剪80%的方法。我想要获取位图的y坐标,这样我就可以裁剪任何图像尺寸,并且只能获得底部部分。但有人能指出我如何从位图获取此坐标?或者我必须从布局本身中取出它吗?
答案 0 :(得分:9)
我不熟悉位图上的操作,但是通过检查代码并查看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%)
答案 1 :(得分:1)
请根据您的需要使用我的代码我希望它的工作
if (srcBmp.getWidth() >= srcBmp.getHeight()){
dstBmp = Bitmap.createBitmap(
srcBmp,
srcBmp.getWidth()/2 - srcBmp.getHeight()/2,
0,
srcBmp.getHeight(),
srcBmp.getHeight()
);
}else{
dstBmp = Bitmap.createBitmap(
srcBmp,
0,
srcBmp.getHeight()/2 - srcBmp.getWidth()/2,
srcBmp.getWidth(),
srcBmp.getWidth()
);
}
答案 2 :(得分:1)
我就是这样做的:
topcutoff是你想要在图像顶部切割的东西,而buttomcutoff在buttom上(如果需要的话)
height = height - topcutoff;
height = height - bottomcutoff;
croppedBitmap = Bitmap.createBitmap(croppedBitmap, 0, topcutoff, width, height);
基本上你只需设置一个起始点(topcutoff)从哪里开始显示位图。在你的情况下,这将是80%的位图之后的位置。
这也可以解释一些事情:Google Bitmap Documentation
" int:源"中第一个像素的y坐标,因此您要开始显示图像。