最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 實現(xiàn)高斯模糊效果且兼容低版本

 更新時間:2016年09月22日 15:51:31   作者:gao_chun  
這篇文章主要介紹了Android 實現(xiàn)高斯模糊效果且兼容低版本的相關(guān)資料,本文圖文并茂介紹的非常詳細,需要的朋友可以參考下

 一、效果演示

項目中用到了高斯模糊效果,查閱過一些資料,考慮到性能問題最終還是選擇使用Android自帶的RenderScript庫來實現(xiàn),關(guān)于使用RenderScript來實現(xiàn)高斯模糊網(wǎng)上也有很多類似的方法,大部分都總結(jié)的比較亂,此處算是做一個整理吧,供有類似需求的同學(xué)參考及學(xué)習(xí)。



(項目效果圖)

簡單描述項目效果圖的實現(xiàn)思路:

① 加載定義的xml的Layout

② 使用截屏方法獲取當前窗口的Bitmap對象

③ 將Bitmap對象進行壓縮及高斯模糊處理

④ 將處理過的模糊圖對象作為①中所加載出來的Layout的Background

⑤ 將已經(jīng)加入了模糊圖對象的Layout添加到PopuWindow中并處理子條目的彈出方式

二、適用RenderScript實現(xiàn)高斯模糊

實現(xiàn)高斯模糊效果的方法有很多,可以用java來實現(xiàn),可以使用NDK來實現(xiàn),也可以使用本文推薦的方式來實現(xiàn)(也是使用了JNI的方式),至于為什么選擇使用RenderScript方式來實現(xiàn),必然有一定優(yōu)點。

優(yōu)點:RenderScript方式,速度極快,約為java方式100倍的速度,NDK方式20倍速度(不同圖片質(zhì)量測試所得結(jié)果不同,供參考)

缺點:API17以上有效。(但Google已提供向下兼容的方法,文章后面會有介紹)

下面是使用RenderScript方式的核心代碼:

/************************ 
* 高斯模糊處理 
* @param bitmap 
* @param context 
* @return 
***********************/ 
public static Bitmap blurBitmap(Bitmap bitmap, Context context) { 
// 用需要創(chuàng)建高斯模糊bitmap創(chuàng)建一個空的bitmap 
Bitmap outBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); 
// 初始化Renderscript,該類提供了RenderScript context,創(chuàng)建其他RS類之前必須先創(chuàng)建這個類,其控制RenderScript的初始化,資源管理及釋放 
RenderScript rs = RenderScript.create(context); 
// 創(chuàng)建高斯模糊對象 
ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); 
// 創(chuàng)建Allocations,此類是將數(shù)據(jù)傳遞給RenderScript內(nèi)核的主要方法,并制定一個后備類型存儲給定類型 
Allocation allIn = Allocation.createFromBitmap(rs, bitmap); 
Allocation allOut = Allocation.createFromBitmap(rs, outBitmap); 
//設(shè)定模糊度(注:Radius最大只能設(shè)置25.f) 
blurScript.setRadius(15.f); 
// Perform the Renderscript 
blurScript.setInput(allIn); 
blurScript.forEach(allOut); 
// Copy the final bitmap created by the out Allocation to the outBitmap 
allOut.copyTo(outBitmap); 
// recycle the original bitmap 
bitmap.recycle(); 
// After finishing everything, we destroy the Renderscript. 
rs.destroy(); 
return outBitmap; 
}

該方法中注釋描述的很清楚,但需要注意的是blurScript.setRadius();方法,該方法設(shè)定模糊度時Radius最大只能設(shè)置25.f,可能是對圖片直接進行處理會導(dǎo)致模糊效果不好,故此值最大有效設(shè)定為25,但若想實現(xiàn)更深度的模糊效果,可以先壓縮圖片,降低圖片的質(zhì)量來實現(xiàn)更模糊的效果。

下方是圖片的壓縮處理方法:

/** 
* Compress image by pixel, this will modify image width/height. 
* 
* @param imgPath image path 
* @param pixelW target pixel of width 
* @param pixelH target pixel of height 
* @return 
*/ 
public static Bitmap ratio(String imgPath, float pixelW, float pixelH) { 
BitmapFactory.Options newOpts = new BitmapFactory.Options(); 
// 開始讀入圖片,此時把options.inJustDecodeBounds 設(shè)回true,即只讀邊不讀內(nèi)容 
newOpts.inJustDecodeBounds = true; 
newOpts.inPreferredConfig = Config.RGB_565; 
// Get bitmap info, but notice that bitmap is null now 
Bitmap bitmap = BitmapFactory.decodeFile(imgPath,newOpts); 
newOpts.inJustDecodeBounds = false; 
int w = newOpts.outWidth; 
int h = newOpts.outHeight; 
float ww = pixelW; //設(shè)置寬度為120f,可以明顯看到圖片縮小了 
float hh = pixelH; //設(shè)置高度為240f時,可以明顯看到圖片縮小了 
//縮放比,由于是固定比例縮放,只用高或者寬其中一個數(shù)據(jù)進行計算即可 
int be = 1;//表示不縮放 
if (w > h && w > ww) { //如果寬度大的話根據(jù)寬度固定大小縮放 
be = (int) (newOpts.outWidth / ww); 
} else if (w < h && h > hh) { //如果高度高的話根據(jù)寬度固定大小縮放 
be = (int) (newOpts.outHeight / hh); 
} 
if (be <= 0) be = 1; 
newOpts.inSampleSize = be;//設(shè)置縮放比例 
// 開始壓縮圖片,注意此時已經(jīng)把options.inJustDecodeBounds 設(shè)回false了 
bitmap = BitmapFactory.decodeFile(imgPath, newOpts); 
// 壓縮好比例大小后再進行質(zhì)量壓縮 
//return compress(bitmap, maxSize); //這里再進行質(zhì)量壓縮的意義不大,反而耗資源,刪除 
return bitmap; 
} 

以上方法是使用RenderScript來實現(xiàn)高斯模糊的核心代碼塊及需注意的地方。但是,還是需要注意兼容問題,上述有提到該方法僅適用于API17以上才有效,那么問題來了,需要處理API向下兼容問題。

三、處理API向下兼容問題及注意點

在按照上述方法實現(xiàn)高斯模糊后,運行一看效果,滿滿的成就感,此時,Boss正好帶著客戶過來,小伙子,來,幫客戶安裝一個最新的版本(客戶手機系統(tǒng)版本為Android4.0),裝完后一點。。。。。。。。。。。這特么就尷尬了…………!

追蹤bug時有同學(xué)可能會出現(xiàn)如下錯誤信息:

異常信息一:

09-21 15:07:34.417: E/AndroidRuntime(4476): android.support.v8.renderscript.RSRuntimeException: Error loading RS jni library: java.lang.UnsatisfiedLinkError: Couldn't load RSSupport: findLibrary returned null………………

異常信息二:

java.lang.NoClassDefFoundError: android.renderscript.ScriptIntrinsicBlur………………

解決方案:

報錯信息為android.support.v8.renderscript.RSRuntimeException: Error loading 以及 java.lang.UnsatisfiedLinkError: Couldn't load RSSupport from loader dalvik.system.PathClassLoader 是由于在4.2以上的手機自帶 librsjni.so和libRSSupport.so庫,而4.2以下某些手機沒有這兩個jni庫。所以得把這兩個jni 導(dǎo)入到我們的工程下便可。那么文件在何處呢?

以下是本人的文件路徑:C:\Tools\android-sdk\build-tools\23.0.3\renderscript\lib\packaged,renderscript-v8.jar包位于renderscript\lib目錄下。

即:android sdk 路徑下 build-tools\各個版本\renderscript\lib\packaged 下的四個目錄,這里需要注意jar包和.so版本的選擇最好選最新的,例如24.0.0中增加了x86-64的適配。

好了,到這里就可以完美的兼容4.2以下的版本了。另外,還有一個最最最重要的注意點,我被這個細節(jié)困擾了至少2小時,現(xiàn)在想起來還覺得蛋疼,在你做完上面的一切事情之后,請注意一定能要將import的包路徑更換過來:import android.renderscript更換為import android.support.v8.renderscript。具體如下:

import android.support.v8.renderscript.Allocation; 
import android.support.v8.renderscript.Element; 
import android.support.v8.renderscript.RenderScript; 
import android.support.v8.renderscript.ScriptIntrinsicBlur; 

最最最最后需要注意的一點,若項目中對代碼加了混淆,別忘了這個。OK,就到這里了。

四、附:

另外分享兩個處理高斯模糊的GitHub:

https://github.com/wl9739/BlurredView
https://github.com/robinxdroid/Blur

以上所述是小編給大家介紹的Android 實現(xiàn)高斯模糊效果且兼容低版本的全部敘述,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • android 瀏覽器之多窗口方案詳解

    android 瀏覽器之多窗口方案詳解

    android 瀏覽器之多窗口方案詳細介紹,需要的朋友可以過來參考下
    2013-07-07
  • Android studio實現(xiàn)菜單效果

    Android studio實現(xiàn)菜單效果

    這篇文章主要為大家詳細介紹了Android studio實現(xiàn)菜單效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Android編程實現(xiàn)壓縮圖片并加載顯示的方法

    Android編程實現(xiàn)壓縮圖片并加載顯示的方法

    這篇文章主要介紹了Android編程實現(xiàn)壓縮圖片并加載顯示的方法,涉及Android開發(fā)中圖片的運算、壓縮處理操作及界面布局顯示壓縮圖片等相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • Android openGl 繪制簡單圖形的實現(xiàn)示例

    Android openGl 繪制簡單圖形的實現(xiàn)示例

    這篇文章主要介紹了Android openGl 繪制簡單圖形的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Android獲取WiFi網(wǎng)絡(luò)列表的流程步驟

    Android獲取WiFi網(wǎng)絡(luò)列表的流程步驟

    在Android開發(fā)中,我們經(jīng)常需要獲取設(shè)備附近可用的Wi-Fi網(wǎng)絡(luò)列表,這對于開發(fā)需要基于Wi-Fi網(wǎng)絡(luò)進行功能或者與其他設(shè)備進行通信的應(yīng)用程序非常重要,本文將介紹如何在Android應(yīng)用程序中獲取Wi-Fi網(wǎng)絡(luò)列表,需要的朋友可以參考下
    2024-11-11
  • RxJava入門之介紹與基本運用

    RxJava入門之介紹與基本運用

    對于Android開發(fā)者來說,當有一天打開技術(shù)論壇、博客滿屏都是各種Rx的時候,心里是很慌的。所以趁著現(xiàn)在跟著小編通過這篇文章先來簡單認識下RxJava,以及RxJava的基本運用。對這感興趣的朋友下面來一起看看吧。
    2016-09-09
  • Android Uri和文件路徑互相轉(zhuǎn)換的實例代碼

    Android Uri和文件路徑互相轉(zhuǎn)換的實例代碼

    在項目中需要用到將Uri轉(zhuǎn)換為絕對路徑,下面小編把Android Uri和文件路徑互相轉(zhuǎn)換的實例代碼分享到腳本之家平臺,需要的的朋友參考下吧
    2017-07-07
  • 實例講解Android中的AutoCompleteTextView自動補全組件

    實例講解Android中的AutoCompleteTextView自動補全組件

    AutoCompleteTextView組件被用在輸入框中能實現(xiàn)輸入內(nèi)容自動補全的功能,類似于大家平時用Google時的輸入聯(lián)想,這里我們來用實例講解Android中的AutoCompleteTextView自動補全組件,特別是實現(xiàn)郵箱地址補全的例子,非常實用
    2016-05-05
  • Android UI效果之繪圖篇(四)

    Android UI效果之繪圖篇(四)

    這篇文章主要介紹了Android UI效果之繪圖篇,針對Android開發(fā)中的UI效果設(shè)計模塊中Shader進行講解,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Android實現(xiàn)圓形圖片小工具

    Android實現(xiàn)圓形圖片小工具

    這篇文章主要為大家詳細介紹了Android實現(xiàn)圓形圖片小工具,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09

最新評論

宁乡县| 清丰县| 宁海县| 青海省| 鹤岗市| 昔阳县| 台前县| 获嘉县| 泸溪县| 清涧县| 顺平县| 新密市| 全椒县| 成武县| 赫章县| 五莲县| 太保市| 盐津县| 威宁| 阳朔县| 泸西县| 聊城市| 隆安县| 无锡市| 三门峡市| 东丰县| 开江县| 临澧县| 乳源| 疏勒县| 当涂县| 麻栗坡县| 金乡县| 博客| 政和县| 图木舒克市| 沿河| 连云港市| 光山县| 新源县| 融水|