Android - 选择性专注于位图

Que*_* S. 5 android bitmap blur

我现在能够模糊整个位图(例如通过调整大小而不是向上调整大小).

我想要实现的效果是选择性模糊:结果位图会模糊,减去它的圆形/椭圆形部分,它仍然是锐利的:

示例图片

困难的部分是尖锐的椭圆形部分可能更小或更大,并且应该是可移动的(其坐标并不总是原始位图的中心).

我已经找到了解决方案,但我认为它不是一个性能良好的解决方案:

  1. 将原始位图复制到两个不同的位图(背景和前景)
  2. 模糊背景之一
  3. 将前景一个裁剪成所需的形状(圆形或椭圆形)
  4. 稍微擦除前景的边框(以避免前景和背景图像之间过于明显的差异)
  5. 将两个图像放回原处
  6. 将其导出为位图

可能的解决方案图

另一种解决方案可以是重新创建模糊算法,该算法将贯穿原始位图的每个像素并且根据位图的部分应用更高或更低的模糊量.

Que*_* S. 3

我最终决定遵循我的第一个想法,使用@DerGolem 链接。这是图表的更新版本:

更新图表

算法非常简单:

  1. 我们创建位图的两个副本:第一个将用作背景,而另一个将用作图片的清晰部分。为了避免第二个太锐利,我们将使用准备好的蒙版(存储在drawables文件夹中)
  2. 我们根据需要模糊第一个
  3. 我们将遮罩应用于第二个位图
  4. 我们通过前两个步骤创建了一个位图

我创建了一个托管在 BitBucket 上的示例演示应用程序。您可以克隆该项目并尝试一下,性能比我预期的要好得多!

为了实现这一目标,我使用了以下资源:

  1. RenderScript 模糊背景,比上下调整图像大小要好得多:1 , 2
  2. 了解波特/达夫

正如项目自述文件中所述,提供的代码远非完美,但它可以工作。