温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用RenderScript怎么实现高斯模糊效果

发布时间:2021-08-11 11:23:29 来源:亿速云 阅读:139 作者: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