2014-12-29 46 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

謝謝你,我在互聯網上尋找如何實現選擇性焦點,除了這個答案我找不到任何東西 –