1. 程式人生 > >Android快速高斯模糊對話方塊

Android快速高斯模糊對話方塊

// MainActivity.java

package com.example.blurdemo;import android.annotation.SuppressLint;import android.app.Activity;import android.content.DialogInterface;import android.content.DialogInterface.OnDismissListener;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import
android.view.View.OnClickListener;import android.webkit.WebSettings.PluginState;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.Button;public class MainActivity extends Activity { private Button button; private WebView webView; @SuppressWarnings("deprecation"
) @SuppressLint({ "SetJavaScriptEnabled", "InflateParams" }) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final View contentView = LayoutInflater.from(this).inflate(R.layout.activity_main, null); setContentView(contentView); button = (Button)
findViewById(R.id.button); webView = (WebView) findViewById(R.id.webView); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { button.setVisibility(View.GONE); SearchDialog dialog = new SearchDialog(MainActivity.this, contentView); dialog.show(); dialog.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { button.setVisibility(View.VISIBLE); } }); } }); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setPluginState(PluginState.ON); webView.getSettings().setPluginsEnabled(true); webView.getSettings().setAllowFileAccess(true); webView.getSettings().setLoadWithOverviewMode(true); webView.getSettings().setUseWideViewPort(true); webView.loadUrl("http://3g.qq.com"); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); } static { System.loadLibrary("bitmap"); }}

// SearchDialog.java

package com.example.blurdemo;import com.component.bitmap.jni.BitmapTools;import com.component.bitmap.jni.ImageBlur;import android.annotation.SuppressLint;import android.app.Activity;import android.app.Dialog;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Matrix;import android.graphics.Rect;import android.os.Handler;import android.os.Message;import android.view.Display;import android.view.View;import android.widget.ImageView;import android.widget.Toast;public class SearchDialog extends Dialog { private ImageView bgImageView; private long startTime; public SearchDialog(final Context context) { super(context, R.style.searchDialog); setContentView(R.layout.dialog_search); bgImageView = (ImageView) findViewById(R.id.bgImageView); bgImageView.post(new Runnable() { @Override public void run() { startTime = System.currentTimeMillis(); Bitmap bitmap = myShot((MainActivity) context); duBlue(bitmap); } }); } public SearchDialog(Context context, final View view) { super(context, R.style.searchDialog); setContentView(R.layout.dialog_search); bgImageView = (ImageView) findViewById(R.id.bgImageView); bgImageView.post(new Runnable() { @Override public void run() { startTime = System.currentTimeMillis(); Bitmap bitmap = BitmapTools.getBitmapFromView(view); duBlue(bitmap); } }); } private void duBlue(final Bitmap srcBitmap) { new Thread() { public void run() { Bitmap bitmap = srcBitmap; int width = bitmap.getWidth(); int height = bitmap.getHeight(); bitmap = zoomImage(bitmap, 50, 50 * height / width); bitmap = ImageBlur.doBlurJniBitMap(bitmap, 5, true); bitmap = zoomImage(bitmap, width, height); Message message = new Message(); long time = System.currentTimeMillis() - startTime; message.obj = bitmap; message.arg1 = (int) time; handler.sendMessage(message); }; }.start(); } @SuppressLint("HandlerLeak") private Handler handler = new Handler() { public void handleMessage(Message msg) { Bitmap bitmap = (Bitmap) msg.obj; bgImageView.setImageBitmap(bitmap); Toast.makeText(getContext(), "耗時 = " + msg.arg1 + "毫秒", Toast.LENGTH_SHORT).show(); }; }; /*** * 圖片的縮放方法 * * @param bgimage * :源圖片資源 * @param newWidth * :縮放後寬度 * @param newHeight * :縮放後高度 * @return */ public static Bitmap zoomImage(Bitmap bgimage, double newWidth, double newHeight) { // 獲取這個圖片的寬和高 float width = bgimage.getWidth(); float height = bgimage.getHeight(); // 建立操作圖片用的matrix物件 Matrix matrix = new Matrix(); // 計算寬高縮放率 float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; // 縮放圖片動作 matrix.postScale(scaleWidth, scaleHeight); Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width, (int) height, matrix, true); return bitmap; } @SuppressWarnings("deprecation") public Bitmap myShot(Activity activity) { // 獲取windows中最頂層的view View view = activity.getWindow().getDecorView(); view.buildDrawingCache(); // 獲取狀態列高度 Rect rect = new Rect(); view.getWindowVisibleDisplayFrame(rect); int statusBarHeights = rect.top; Display display = activity.getWindowManager().getDefaultDisplay(); // 獲取螢幕寬和高 int widths = display.getWidth(); int heights = display.getHeight(); // 允許當前視窗儲存快取資訊 view.setDrawingCacheEnabled(true); // 去掉狀態列 Bitmap bmp = Bitmap.createBitmap(view.getDrawingCache(), 0, statusBarHeights, widths, heights - statusBarHeights); // 銷燬快取資訊 view.destroyDrawingCache(); return bmp; }}

// activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${relativePackage}.${activityClass}" > <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerHorizontal="true" android:layout_centerVertical="true" /> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="搜索" /></RelativeLayout>

// dialog_search.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/bgImageView" android:layout_width="match_parent" android:layout_height="match_parent" /> <ImageView android:background="#55555555" android:layout_width="match_parent" android:layout_height="match_parent" /> <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" > <requestFocus /> </EditText></RelativeLayout>

// styles.xml

<resources>

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.

    -->
    <style name="AppBaseTheme" parent="android:Theme.Light">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.

        -->
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>

    <style name="searchDialog">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:backgroundDimEnabled">true</item>
    </style>

</resources>

相關推薦

Android快速模糊對話方塊

// MainActivity.java package com.example.blurdemo;import android.annotation.SuppressLint;import android.app.Activity;import android.conte

Android實現快速模糊

高斯模糊想必大家都聽說過,百度百科對於高斯模糊的解釋為: 高斯模糊(英語:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop、GIMP以及Paint.NET等影象處理軟體中廣泛使用的處理效果,通常用它來減少影象噪聲以及降低細節層次。所謂"模糊",

Android 圖片模糊解決方案

Android 圖片高斯模糊解決方案 近年來,圖片高斯模糊備受設計師的青睞,在各大知名APP中,如微信、手機QQ、網易雲音樂等等都有對背景高斯圖模糊的設計,在Adnroid 中,現在常用的圖片高斯模糊技術有三種:RenderScript 、fastBlur、對RenderScript和

Android Glide模糊載入圖片

Glide.with(this) .load(R.mipmap.bg_default_cover) .crossFade(1000) .bitmapTransform(new B

封裝個 Android模糊元件

最近基於 Android StackBlur 開源庫,根據自己碰到的需求場景,封裝了個高斯模糊元件,順便記錄一下。 為什麼要自己重複造輪子? 其實也談不上重頭自己造輪子,畢竟是基於大神的開源庫,做了二次封裝。封裝的目的在於,方便外部使用。畢竟有著自己的程式設計習慣,大神的開源庫也只是提供了基礎的功能,現實程式

Android高效能模糊方案

簡述: 做直播類app的時候點選進入直播間接通的過程中首先顯示一張模糊的毛玻璃效果的圖片,那麼此時就要考慮使用高斯模糊的時候了。Android中提供了RenderScript來操作圖片,但是這個的使用版本要求是在API17以上,所以我們還可以考慮使用第三方可FastBlur

快速模糊(IIR遞迴模糊

本人是影象處理的初學者,在http://www.cnblogs.com/Imageshop/p/3145216.html博文中看到有關影象柔光的特效處理原理後自己也動手實現了一下,這裡包括一個快速高斯模糊的演算法,具體原理可以參考論文《Recursive Imp

Android實現模糊(也叫毛玻璃效果)

/*** 高斯模糊* @param bkg* @param view*/private void blur(Bitmap bkg, View view) {float radius = 25;Bitmap overlay = Bitmap.createBitmap((int) (view.getMeasure

影象基本變換---影象快速模糊演算法

本文將詳細介紹經典高斯濾波的相關內容。 高斯濾波器實質上是一種訊號的濾波器,其用途是訊號的平滑處理。它是一類根據高斯函式的形狀來選擇權重的線性平滑濾波器,該濾波器對於抑制服從正態分佈的噪聲非常有效。高斯函式的公式如下所示: 一維高斯函式:             

Android模糊的記錄

最近在開發專案的時候遇到一個UI提出的效果就是PS裡面的高斯模糊效果,上圖                                                            下面其實是一段文字內容,但是當用戶沒有獲取到某種許可權的時候,是不能檢視具體的文

Android 圖片模糊處理

/** 水平方向模糊度 */ private static float hRadius = 10; /** 豎直方向模糊度 */ private static float vRadius = 10; /** 模糊迭代度 */ private static int iterations = 7;

Android開發 模糊的實現

同類參考文章:戳我 戳我 高斯模糊是什麼? 高斯模糊(英語:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop、GIMP以及Paint.NET等影象處理軟體中廣泛使用的處理效果,通常用它來減少影象噪聲以及降低細節層次。這種模糊技術生成的影象,其

android 實現模糊

方法一 (1)RenderScript RenderScript是Google在Android 3.0(API 11)中引入的一個高效能圖片處理框架。 使用RenderScriprt實現高斯模糊: 首先在在build.gradle的defaultConf

使用遞迴濾波器實現快速模糊

高斯窗常用於對影象進行模糊或低通濾噪,但是隨著高斯半徑的增加,時間消耗會逐級增加 如高斯半徑為N時,計算每個輸出取樣點需要計算的乘法次數為(2N+1)*模糊方向數,加法次數為2N*模糊方向數,這種情況下,當N=100時,甚至更大時,計算量是非常大的,即使進行SIMD指令集優

android實現模糊功能

最近專案要求android客戶端模仿IOS的一種模糊背景的效果,高斯模糊在PS裡邊常用。大體思路是兩步: 第一步獲取Activity的螢幕截圖。 第二步對截圖進行高斯模糊演算法。 總之感覺體驗不是很好,主要原因是對Bitmap進行操作,這種東西本來就是安卓的噩夢,搞不好還會

Android實現模糊

心血來潮再來一篇部落格,和大家分享一下高斯模糊技巧 核心程式碼如下: /** * bitmap 物件進行模糊處理 * @param sentBitmap 原圖bitmap

快速的“模糊演算法(附Android原始碼)

1:高斯模糊演算法(參考:http://www.ruanyifeng.com/blog/2012/11/gaussian_blur.html) 所謂的模糊演算法就是當前畫素點和周圍畫素點進行加權均值之後的結果替換當前畫素值。因此均值模糊是最簡單的,只要將周圍的畫素點

Android使用RenderScript實現圖片的模糊效果

Android使用RenderScript實現圖片的高斯模糊效果 首先來看一下什麼是高斯模糊效果呢? 高斯模糊(英語:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop、GIMP以及Paint.NET等影象處理軟體中廣泛使用的處理效果,通常用它

Android 使用Glide4.7.1對圖片進行圓角處理和模糊

一、概述 在Glide V4版本之後,對於圓角處理和高斯模糊的方法都有了一些改變,下面主要簡單介紹下處理方法 二、正文 在開始之前,我們先來看看效果,看看是否符合你的需要,圖1:圓角處理(四個角可以隨意組合處理);圖2:高斯模糊處理;圖3:圓角處理和高斯模糊處理 (

android-support-v8 建立模糊

public static Bitmap apply(Context context, Bitmap sentBitmap, int radius) { final Bitmap bitmap = sentBitmap.copy(sentBitm