在Android中删除Bitmap的中心区域并缩小

时间:2012-02-20 08:25:58

标签: android bitmap android-canvas android-image

我正在尝试通过获取现有的Bitmap并删除它的中心来动态创建android中的图像,以便制作“裁剪”版本。生成的图像的高度自然会小于原始图像,就像附加的示例一样。

我有一个粗略的方法是通过从原始位置创建两个新的位图,一个包含裁剪部分上方的图像顶部(例如示例中的android头部),另一个包含下面的剩余图像使用Bitmap.createBitmap(source, x, y, width, height)方法的裁剪部分(机器人的脚),然后将这两个位图绘制到尺寸等于原始图像的画布上减去删除的空间。

这感觉有点笨拙,因为我可以每秒多次调用这个方法,每次创建两个位图似乎很浪费。

我想知道是否有更有效的方法来做到这一点。比如使用Path绘制原始Bitmap到画布上,将Paint的xfermode设置为a new PorterDuffXfermode(Mode.DST_OUT)为了剪切我想删除的图像部分。但这似乎清除了该区域并且没有缩小图像,即它在Android中间留下了一个很大的空隙。

任何建议都非常感谢!

Example of cutting out centre of bitmap

1 个答案:

答案 0 :(得分:1)

为什么要创建两个位图?您只需创建一个位图,然后执行两次canvas.drawBitmap()。

Bitmap bmpOriginal;
Bitmap bmpDerived = Bitmap.create(...);
Canvas canvas = new Canvas(bmpDerived);
canvas.drawBitmap(bmpOriginal, rectTopSrc, rectTopDst, null);
canvas.drawBitmap(bmpOriginal, rectBottomSrc, rectBottomDst, null);

完成。