中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用RenderScript怎么實現高斯模糊效果

發布時間:2021-08-11 11:23:29 來源:億速云 閱讀:166 作者:Leah 欄目:移動開發

這篇文章給大家介紹使用RenderScript怎么實現高斯模糊效果,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

RenderScript實現

首先在app目錄下build.gradle文件中添加如下代碼:

defaultConfig {         applicationId "io.github.marktony.gaussianblur"         minSdkVersion 19         targetSdkVersion 25         versionCode 1         versionName "1.0"         renderscriptTargetApi 19         renderscriptSupportModeEnabled true     }

RenderScriptIntrinsics提供了一些可以幫助我們快速實現各種圖片處理的操作類,例如,ScriptIntrinsicBlur,可以簡單高效實現  高斯模糊效果。

package io.github.marktony.gaussianblur;  import android.content.Context; import android.graphics.Bitmap; import android.support.annotation.IntRange; import android.support.annotation.NonNull; import android.support.v8.renderscript.Allocation; import android.support.v8.renderscript.Element; import android.support.v8.renderscript.RenderScript; import android.support.v8.renderscript.ScriptIntrinsicBlur;  public class RenderScriptGaussianBlur {      private RenderScript renderScript;      public RenderScriptGaussianBlur(@NonNull Context context) {         this.renderScript = RenderScript.create(context);     }      public Bitmap gaussianBlur(@IntRange(from = 1, to = 25) int radius, Bitmap original) {         Allocation input = Allocation.createFromBitmap(renderScript, original);         Allocation output = Allocation.createTyped(renderScript, input.getType());         ScriptIntrinsicBlur scriptIntrinsicBlur = ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript));         scriptIntrinsicBlur.setRadius(radius);         scriptIntrinsicBlur.setInput(input);         scriptIntrinsicBlur.forEach(output);         output.copyTo(original);         return original;     }  }

然后就可以直接使用RenderScriptGaussianBlur,愉快地根據SeekBar的值,實現不同程度的模糊了。

package io.github.marktony.gaussianblur;  import android.content.DialogInterface; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.TextView;  public class MainActivity extends AppCompatActivity {      private ImageView imageView;     private ImageView container;     private LinearLayout layout;     private TextView textViewProgress;     private RenderScriptGaussianBlur blur;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          imageView = (ImageView) findViewById(R.id.imageView);         container = (ImageView) findViewById(R.id.container);          container.setVisibility(View.GONE);          layout = (LinearLayout) findViewById(R.id.layout);          layout.setVisibility(View.VISIBLE);          SeekBar seekBar = (SeekBar) findViewById(R.id.seekBar);         textViewProgress = (TextView) findViewById(R.id.textViewProgress);         TextView textViewDialog = (TextView) findViewById(R.id.textViewDialog);         blur = new RenderScriptGaussianBlur(MainActivity.this);          seekBar.setMax(25);         seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {             @Override             public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {                 textViewProgress.setText(String.valueOf(progress));             }              @Override             public void onStartTrackingTouch(SeekBar seekBar) {              }              @Override             public void onStopTrackingTouch(SeekBar seekBar) {                 int radius = seekBar.getProgress();                 if (radius < 1) {                     radius = 1;                 }                 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);                 imageView.setImageBitmap(blur.gaussianBlur(radius, bitmap));             }         });          textViewDialog.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View v) {                  container.setVisibility(View.VISIBLE);                  layout.setDrawingCacheEnabled(true);                 layout.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_LOW);                  Bitmap bitmap = layout.getDrawingCache();                  container.setImageBitmap(blur.gaussianBlur(25, bitmap));                  layout.setVisibility(View.INVISIBLE);                  AlertDialog dialog = new AlertDialog.Builder(MainActivity.this).create();                 dialog.setTitle("Title");                 dialog.setMessage("Message");                 dialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {                     @Override                     public void onClick(DialogInterface dialog, int which) {                         dialog.dismiss();                     }                 });                 dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {                     @Override                     public void onClick(DialogInterface dialog, int which) {                      }                 });                 dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {                     @Override                     public void onCancel(DialogInterface dialog) {                      }                 });                  dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {                     @Override                     public void onCancel(DialogInterface dialog) {                         container.setVisibility(View.GONE);                         layout.setVisibility(View.VISIBLE);                     }                 });                  dialog.show();             }         });      } }

關于使用RenderScript怎么實現高斯模糊效果就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

密山市| 连城县| 阿瓦提县| 平舆县| 安龙县| 桓仁| 河津市| 黎城县| 商南县| 奉节县| 龙泉市| 大港区| 白银市| 湘潭市| 镇江市| 金阳县| 南京市| 麻栗坡县| 靖江市| 蒙阴县| 天津市| 凌云县| 文化| 枣庄市| 咸宁市| 贺州市| 兴义市| 犍为县| 延川县| 昭觉县| 大关县| 平江县| 平远县| 兰考县| 明溪县| 江阴市| 双江| 渝北区| 蕲春县| 岢岚县| 桑日县|