2014-12-29 33 views
5

我目前能够模糊整个位图(通过调整比例调整比例)。Android - 选择性聚焦于位图

我试图完成的效果是一种选择性模糊:结果位图将被模糊,减去它的一个圆/椭圆部分仍然是尖锐:

Example image

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

我已经找到了解决办法,但我不认为它是一个不错的表现明智的解决方案:

  1. 复制原始位分成两个不同的位图(背景和前景)
  2. 模糊的背景一个
  3. 作物前景一个成所需的形状(圆形或椭圆形)
  4. 擦除前景的边界位(以避免前景和背景图像之间的太尖锐差)
  5. 两个图像一起放回
  6. 导出为位图

Possible solution image

彼此的解决办法是重建这将通过原始位图的每一个像素的运行和应用量的模糊算法取决于位图的部分,模糊程度更高或更低。

+1

'另一个解决方案可能是重新创建一个模糊算法,它将贯穿每个像素 - 这将需要**完成**。对我来说,你现在的解决方案似乎是最好的解决方案。快速模糊技术/ s:http://trickyandroid.com/advanced-blurring-techniques/ –

+1

您的意见符合我的意见:即使通过修改现有的算法,如http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html ,性能也不会好 – chteuchteu

+1

快速模糊技术/ S:http://trickyandroid.com/advanced-blurring-techniques/一些有趣的关于PorterDuff(用于切割孔):http://ssp.impulsetrain.com/ porterduff.html –

回答

3

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

Updated chart

算法很简单:

  1. 我们创建位图的两个副本:第一个将作为背景,而另一个将被用作图片的尖锐部分。为了避免第二个是太尖锐,我们将使用事先准备好的口罩(存储在绘图资源文件夹)
  2. 我们模糊的第一个,就像我们希望
  3. 我们敷面膜到第二位
  4. 我们从前两个步骤创建一个位图

我创建了一个示例演示应用程序,托管在BitBucket上。你可以clone the project并尝试它,表现比我预期的要好得多!

为了实现这一点,我用以下资源:

  1. 的renderScript虚化背景,不是向下和向上调整图像好得多:12
  2. Understand Porter/Duff

正如该项目的自述文件中所述,所提供的代码远非完美,但它很有用。

+0

谢谢你,我在互联网上寻找如何实现选择性焦点,除了这个答案我找不到任何东西 –