Androidはガウスぼかし効果を実現し、低バージョンに対応しています。
一、効果のデモンストレーション
プロジェクトでガウスぼかし効果を使って、いくつかの資料を調べましたが、性能の問題を考慮して、結局はAndroidのRenderScriptライブラリを使って実現しました。RenderScriptを使ってガウスぼかしネットを実現するには多くの類似の方法があります。
(プロジェクト効果図)
プロジェクトの効果図の実現構想を簡単に説明します。
①定義されたxmlのLayoutをロードする
②スクリーンショットで現在のウィンドウのBitmapオブジェクトを取得する
③Bitmapオブジェクトを圧縮及びガウスぼかし処理する
④処理したぼかし図の対象を①にロードされたLayoutのBackgroundとする。
⑤ぼかした図のオブジェクトを追加したLayoutをPopuWindowに追加し、サブエントリのイジェクトを処理する方法
二、RenderScriptを適用してガウスぼかしを実現する。
ガウスのはっきりしない効果を実現する方法はたくさんあって、javaで実現することができて、NDKを使って実現することができて、本明細書の推薦の方式を使って実現することもできます(JNIの方式を使ったのです)、どうしてRenderScript方式を使って実現することを選ぶならば、必然的に優越点があります。
利点:RenderScript方式は、速度が非常に速く、約java方式の100倍の速度で、NDK方式の20倍の速度である(異なる画像の品質テストで得られた結果は違っています。参考にしてください。)
短所:API 17以上は有効です。しかし、Googleは下の互換性のある方法を提供しています。記事の後に紹介されます。)
以下はRenderScript方式を使用したコアコードです。
下には画像の圧縮処理方法があります。
三、APIを処理することは、下の互換性の問題と注意点になる。
上記の方法でガウスぼかしを実現した後、実行してみて、達成感がいっぱいです。この時、Bossはちょうどお客さんを連れて来て、お客さんに最新バージョン(お客様の携帯システムのバージョンはAndroid 4.0)をインストールしてください。この特はどうしてばつが悪くなりましたか?
バグを追跡する時、次のようなエラーが発生する可能性があります。
異常情報一:
09-21 15:07:34.47:E/Android dRuntime(4476):android.support.v 8.rendersscript.RSRuntimeException:Error loading RS Jni library:java.lang.Unitis fiedlinkError:Couldn't'load RSERpporry...
異常情報二:
java.lang.NoClass DefFoundError:android.rendersscript.Script Intrinic Blur……
ソリューション:
エラーメッセージはandroid.support.v.8 rendersscript.RSRuntimeException:Error loadingおよびjava.lang.Unisatis fied LinkError:Couldn't load RSpport from loader dalvik.sysstem.PathClass Loaderは4.2以上の携帯電話にSulitjorrがありません。ですから、この二つのjniを私たちのプロジェクトに導入しなければなりません。書類はどこにありますか?
以下は本人のファイルパスです。C:\Tools\android-sdk\build-tools\23.0.3\renders script\lib\packaged、renders script-v 8.jarパッケージはrenders script\libディレクトリの下にあります。
すなわち、android sdk経路下でbuild-tools\各バージョン\renders script\lib\packagedの四つのディレクトリは、ここでjarパケットと.soバージョンの選択に注意しなければならない。
はい、ここに行けば4.2以下のバージョンにぴったり互換できます。また、もう一つの最も重要な注意点があります。この詳細に悩まされました。少なくとも2時間、今でも卵が痛いと思います。上のすべてのことをした後、ぜひimportのカバンの経路を変えてください。import android.rendescriptはimport android.support.v 8.rendescriptに変えてください。具体的には以下の通りです
四、附:
ガウスぼかしの2つの処理を共有するGitHub:
https://github.com/wl9739/BlurredView
https://github.com/robinxdroid/Blur
以上は小编が绍介したAndroidがガウスのぼんやりしている効果を実现してしかも低いバージョンのすべての叙述に対応するので、みんなに対して助けがあることを望んで、もしみんなはいかなる疑问があるならばメッセージを下さい、小编は直ちにみんなのに返答することができます。ここでも私たちのサイトを応援してくれてありがとうございます。
プロジェクトでガウスぼかし効果を使って、いくつかの資料を調べましたが、性能の問題を考慮して、結局はAndroidのRenderScriptライブラリを使って実現しました。RenderScriptを使ってガウスぼかしネットを実現するには多くの類似の方法があります。
(プロジェクト効果図)
プロジェクトの効果図の実現構想を簡単に説明します。
①定義されたxmlのLayoutをロードする
②スクリーンショットで現在のウィンドウのBitmapオブジェクトを取得する
③Bitmapオブジェクトを圧縮及びガウスぼかし処理する
④処理したぼかし図の対象を①にロードされたLayoutのBackgroundとする。
⑤ぼかした図のオブジェクトを追加したLayoutをPopuWindowに追加し、サブエントリのイジェクトを処理する方法
二、RenderScriptを適用してガウスぼかしを実現する。
ガウスのはっきりしない効果を実現する方法はたくさんあって、javaで実現することができて、NDKを使って実現することができて、本明細書の推薦の方式を使って実現することもできます(JNIの方式を使ったのです)、どうしてRenderScript方式を使って実現することを選ぶならば、必然的に優越点があります。
利点:RenderScript方式は、速度が非常に速く、約java方式の100倍の速度で、NDK方式の20倍の速度である(異なる画像の品質テストで得られた結果は違っています。参考にしてください。)
短所:API 17以上は有効です。しかし、Googleは下の互換性のある方法を提供しています。記事の後に紹介されます。)
以下はRenderScript方式を使用したコアコードです。
/************************
*
* @param bitmap
* @param context
* @return
***********************/
public static Bitmap blurBitmap(Bitmap bitmap, Context context) {
// bitmap bitmap
Bitmap outBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
// Renderscript, RenderScript context, RS , RenderScript ,
RenderScript rs = RenderScript.create(context);
//
ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
// Allocations, RenderScript ,
Allocation allIn = Allocation.createFromBitmap(rs, bitmap);
Allocation allOut = Allocation.createFromBitmap(rs, outBitmap);
// ( :Radius 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.set Radius()であることに注意が必要である。方法としては、この方法でボケを設定すると最大25 fしか設定できません。画像を直接処理するとボケ効果が悪くなる可能性があります。この値は最大で有効に25に設定されていますが、より深いボケ効果を実現するためには、まず画像を圧縮し、画質を下げてボケ効果を実現できます。下には画像の圧縮処理方法があります。
/**
* 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 true,
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; // 120f,
float hh = pixelH; // 240f ,
// , ,
int be = 1;//
if (w > h && w > ww) { //
be = (int) (newOpts.outWidth / ww);
} else if (w < h && h > hh) { //
be = (int) (newOpts.outHeight / hh);
}
if (be <= 0) be = 1;
newOpts.inSampleSize = be;//
// , options.inJustDecodeBounds false
bitmap = BitmapFactory.decodeFile(imgPath, newOpts);
//
//return compress(bitmap, maxSize); // , ,
return bitmap;
}
以上の方法はRenderScriptを用いてガウスぼかしのコアコードブロックを実現し、注意すべき点である。しかし、まだ互換性の問題に注意する必要があります。上記の方法はAPI 17以上に適用されてこそ有効であり、問題が来たら、APIの下方向互換性の問題を処理する必要があります。三、APIを処理することは、下の互換性の問題と注意点になる。
上記の方法でガウスぼかしを実現した後、実行してみて、達成感がいっぱいです。この時、Bossはちょうどお客さんを連れて来て、お客さんに最新バージョン(お客様の携帯システムのバージョンはAndroid 4.0)をインストールしてください。この特はどうしてばつが悪くなりましたか?
バグを追跡する時、次のようなエラーが発生する可能性があります。
異常情報一:
09-21 15:07:34.47:E/Android dRuntime(4476):android.support.v 8.rendersscript.RSRuntimeException:Error loading RS Jni library:java.lang.Unitis fiedlinkError:Couldn't'load RSERpporry...
異常情報二:
java.lang.NoClass DefFoundError:android.rendersscript.Script Intrinic Blur……
ソリューション:
エラーメッセージはandroid.support.v.8 rendersscript.RSRuntimeException:Error loadingおよびjava.lang.Unisatis fied LinkError:Couldn't load RSpport from loader dalvik.sysstem.PathClass Loaderは4.2以上の携帯電話にSulitjorrがありません。ですから、この二つのjniを私たちのプロジェクトに導入しなければなりません。書類はどこにありますか?
以下は本人のファイルパスです。C:\Tools\android-sdk\build-tools\23.0.3\renders script\lib\packaged、renders script-v 8.jarパッケージはrenders script\libディレクトリの下にあります。
すなわち、android sdk経路下でbuild-tools\各バージョン\renders script\lib\packagedの四つのディレクトリは、ここでjarパケットと.soバージョンの選択に注意しなければならない。
はい、ここに行けば4.2以下のバージョンにぴったり互換できます。また、もう一つの最も重要な注意点があります。この詳細に悩まされました。少なくとも2時間、今でも卵が痛いと思います。上のすべてのことをした後、ぜひimportのカバンの経路を変えてください。import android.rendescriptはimport android.support.v 8.rendescriptに変えてください。具体的には以下の通りです
import android.support.v8.renderscript.Allocation;
import android.support.v8.renderscript.Element;
import android.support.v8.renderscript.RenderScript;
import android.support.v8.renderscript.ScriptIntrinsicBlur;
一番最後に注意しなければならない点は、プロジェクトにコードが混同されたら、これを忘れないでください。はい、ここまでです。四、附:
ガウスぼかしの2つの処理を共有するGitHub:
https://github.com/wl9739/BlurredView
https://github.com/robinxdroid/Blur
以上は小编が绍介したAndroidがガウスのぼんやりしている効果を実现してしかも低いバージョンのすべての叙述に対応するので、みんなに対して助けがあることを望んで、もしみんなはいかなる疑问があるならばメッセージを下さい、小编は直ちにみんなのに返答することができます。ここでも私たちのサイトを応援してくれてありがとうございます。