当前位置:首页 » 安卓系统 » android背景虚化

android背景虚化

发布时间: 2022-09-23 18:21:46

❶ android 背景虚化原理是什么

1. RenderScript

谈到高斯模糊,第一个想到的就是RenderScript。RenderScript是由Android3.0引入,用来在Android上编写高性能代码的一种语言(使用C99标准)。 引用官方文档的描述:
RenderScript runtime will parallelize work across all processors available on a device, such as multi-core CPUs, GPUs, or DSPs, allowing you to focus on expressing algorithms rather than scheling work or load balancing.
为了在Android中使用RenderScript,我们需要(直接贴官方文档,比直译更通俗易懂):
High-performance compute kernels are written in a C99-derived language.
A java API is used for managing the lifetime of RenderScript resources and controlling kernel execution.
学习文档:http://developer.android.com/guide/topics/renderscript/compute.html
上面两点总结成一句话为:我们需要一组compute kernels(.rs文件中编写),及一组用于控制renderScript相关的java api(.rs文件自动生成为java类)。 由于compute kernels的编写需要一定的学习成本,从JELLY_BEAN_MR1开始,Androied内置了一些compute kernels用于常用的操作,其中就包括了Gaussian blur。
下面,通过实操来讲解一下RenderScript来实现高斯模糊,最终实现效果(讲文字背景进行模糊处理):

布局:

[html] view plain
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
android:id="@+id/picture"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/splash"
android:scaleType="centerCrop" />

<TextView
android:id="@+id/text"
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Gaussian Blur"
android:textColor="@android:color/black"
android:layout_gravity="center_vertical"
android:textStyle="bold"
android:textSize="48sp" />

<LinearLayout
android:id="@+id/controls"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#7f000000"
android:orientation="vertical"
android:layout_gravity="bottom" />
</FrameLayout>
核心代码:

[java] view plain
private void applyBlur() {
image.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {

@Override
public boolean onPreDraw() {
image.getViewTreeObserver().removeOnPreDrawListener(this);
image.buildDrawingCache();
Bitmap bmp = image.getDrawingCache();
blur(bmp, text, true);
return true;
}
});
}

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void blur(Bitmap bkg, View view) {
long startMs = System.currentTimeMillis();
float radius = 20;

Bitmap overlay = Bitmap.createBitmap((int)(view.getMeasuredWidth()), (int)(view.getMeasuredHeight()), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(overlay);
canvas.translate(-view.getLeft(), -view.getTop());
canvas.drawBitmap(bkg, 0, 0, null);

RenderScript rs = RenderScript.create(SecondActivity.this);

Allocation overlayAlloc = Allocation.createFromBitmap(rs, overlay);
ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, overlayAlloc.getElement());
blur.setInput(overlayAlloc);
blur.setRadius(radius);
blur.forEach(overlayAlloc);
overlayAlloc.To(overlay);
view.setBackground(new BitmapDrawable(getResources(), overlay));
rs.destroy();

statusText.setText("cost " + (System.currentTimeMillis() - startMs) + "ms");
}
当ImageView开始加载背景图时,取出它的drawableCache,进行blur处理,Gaussian blur的主要逻辑在blur函数中。对于在Java中使用RenderScript,文档中也有详细描述,对应到我们的代码,步骤为:
初始化一个RenderScript Context.
至少创建一个Allocation对象用于存储需要处理的数据.
创建compute kernel的实例,本例中是内置的ScriptIntrinsicBlur对象.
设置ScriptIntrinsicBlur实例的相关属性,包括Allocation, radius等.
开始blur操作,对应(forEach).
将blur后的结果拷贝回bitmap中。

❷ 苹果手机跟安卓手机视频模糊背景能显示不


苹果13微信视频背景虚化方法如下:
1.要在视频通话中模糊背景,请先使用任何应用拨打电话。 让我们把 WhatsApp 这里; 打开 WhatsApp 应用程序并进行视频通话。在使用微信视频通话时,下拉出苹果13手机的控制中心,点击视频效果。
2.点击人像模式图标,等图标从蓝色变成灰色即可关闭背景虚化。

❸ 如何实现Android 布局背景模糊化处理

在模仿 IOS 密码输入页面的时候发现其背景有模糊处理,于是了解了一下并记录下来,以便使用.在Android 中具体实现方法如下

查考 http://www.cnblogs.com/lipeil/p/3997992.html

Java代码
private void applyBlur() {

// 获取壁纸管理器
WallpaperManager wallpaperManager = WallpaperManager.getInstance(this.getContext());
// 获取当前壁纸
Drawable wallpaperDrawable = wallpaperManager.getDrawable();
// 将Drawable,转成Bitmap
Bitmap bmp = ((BitmapDrawable) wallpaperDrawable).getBitmap();

blur(bmp);
}

下面之所以要进行small 和big的处理,是因为仅仅靠ScriptIntrinsicBlur
来处理模式,不能到达更模式的效果,如果需要加深模式效果就需要先把背景图片缩小,在处理完之后再放大.这个可以使用Matrix
来实现,而且这样可以缩短模糊化得时间

Java代码
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void blur(Bitmap bkg) {
long startMs = System.currentTimeMillis();
float radius = 20;

bkg = small(bkg);
Bitmap bitmap = bkg.(bkg.getConfig(), true);

final RenderScript rs = RenderScript.create(this.getContext());
final Allocation input = Allocation.createFromBitmap(rs, bkg, Allocation.MipmapControl.MIPMAP_NONE,
Allocation.USAGE_SCRIPT);
final Allocation output = Allocation.createTyped(rs, input.getType());
final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
script.setRadius(radius);
script.setInput(input);
script.forEach(output);
output.To(bitmap);

bitmap = big(bitmap);
setBackground(new BitmapDrawable(getResources(), bitmap));
rs.destroy();
Log.d("zhangle","blur take away:" + (System.currentTimeMillis() - startMs )+ "ms");
}

private static Bitmap big(Bitmap bitmap) {
Matrix matrix = new Matrix();
matrix.postScale(4f,4f); //长和宽放大缩小的比例
Bitmap resizeBmp = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
return resizeBmp;
}

private static Bitmap small(Bitmap bitmap) {
Matrix matrix = new Matrix();
matrix.postScale(0.25f,0.25f); //长和宽放大缩小的比例
Bitmap resizeBmp = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
return resizeBmp;
}

❹ 华为手机拍照取消虚化

华为P30 Pro相机怎么关闭虚化,我们在用现在的华为手机拍照的时候,效果非常好,不仅有虚化效果,而且还有其他的功能,看上去非常高端,但是有的时候,因为工作需要,拍摄的时候并不需要虚化,那么具体如何关闭呢?小白就告诉大家华为P30 Pro相机怎么关闭虚化
工具/原料
more
操作手机:华为P30 Pro 操作系统:安卓Android 10 手机系统:EMUI10.0.0
方法/步骤
1/6 分步阅读
我们打开手机桌面,然后点击桌面上的照相机选项。

2/6
进入照相机之后,在最上方有一个ai图标,我们点击一下。

华为拍照手机-京东手机,世界在手,精彩掌控
广告
3/6
点击一下,进行关闭,这样我们的智能拍照功能就取消了。

合肥 10核256G内存现在手机像素最高多少,899元全网首发超长待机
广告
4/6
然后在我们拍照的时候,点击一下其中的人像。

“合肥·客户服务”-维修地址查询_维修地区分布查询
广告
5/6
然后点击一下配置。这里面有我们的各种特效。

6/6
将所有的效果取消,点击一下最前方的无,这样我们综合起来进行拍照,就不会有背景虚化的效果了。

方法/步骤
1/6 分步阅读
打开手机相机,点击进入拍照。

2/6
拍摄的时候不要离拍摄物太近,保持一定的距离。

3/6
或者调解焦距设置一个合适的焦距。

4/6
如果是大光圈模式,可以设置成拍照模式。

5/6
选择底部的拍照选项,进入拍照模式来拍摄。

6/6
如果还是自动虚化点击关闭上面的AI功能。

总结
1/1
1.打开相机。
2.关闭ai效果。
3.在人像调节处设置效果为无。
注意事项
Tips:在外拍摄的时候,虚化还是非常好用的。
编辑

❺ 安卓手机上有个水滴标啥意思

背景虚化。
手机右上角水滴图标是背景虚化的意思,OPPOR9s加入了自拍虚化后,让人的主体位置更加的突出。

❻ 怎么实现Android 布局背景模糊化处理

这里的模糊都是给设置的背景半透明,就是android:background设置为半透明的在color.xml中定义半透明的方式是这样,#AARRGGBB,#后边的AA就是透明度,从00不透明到FF纯透明,后面的RRGGBB是从000000到FFFFFF的从黑色到白色

❼ 怎么实现Android 布局背景模糊化处理

在模仿 IOS 密码输入页面的时候发现其背景有模糊处理,于是了解了一下并记录下来,以便使用.在Android 中具体实现方法如下
private void applyBlur() {

// 获取壁纸管理器
WallpaperManager wallpaperManager = WallpaperManager.getInstance(this.getContext());
// 获取当前壁纸
Drawable wallpaperDrawable = wallpaperManager.getDrawable();
// 将Drawable,转成Bitmap
Bitmap bmp = ((BitmapDrawable) wallpaperDrawable).getBitmap();

blur(bmp);
}

下面之所以要进行small 和big的处理,是因为仅仅靠ScriptIntrinsicBlur 来处理模式,不能到达更模式的效果,如果需要加深模式效果就需要先把背景图片缩小,在处理完之后再放大.这个可以使用Matrix 来实现,而且这样可以缩短模糊化得时间
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void blur(Bitmap bkg) {
long startMs = System.currentTimeMillis();
float radius = 20;

bkg = small(bkg);
Bitmap bitmap = bkg.(bkg.getConfig(), true);

final RenderScript rs = RenderScript.create(this.getContext());
final Allocation input = Allocation.createFromBitmap(rs, bkg, Allocation.MipmapControl.MIPMAP_NONE,
Allocation.USAGE_SCRIPT);
final Allocation output = Allocation.createTyped(rs, input.getType());
final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
script.setRadius(radius);
script.setInput(input);
script.forEach(output);
output.To(bitmap);

bitmap = big(bitmap);
setBackground(new BitmapDrawable(getResources(), bitmap));
rs.destroy();
Log.d("zhangle","blur take away:" + (System.currentTimeMillis() - startMs )+ "ms");
}

private static Bitmap big(Bitmap bitmap) {
Matrix matrix = new Matrix();
matrix.postScale(4f,4f); //长和宽放大缩小的比例
Bitmap resizeBmp = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
return resizeBmp;
}

private static Bitmap small(Bitmap bitmap) {
Matrix matrix = new Matrix();
matrix.postScale(0.25f,0.25f); //长和宽放大缩小的比例
Bitmap resizeBmp = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
return resizeBmp;
}

热点内容
升级fw用ftp服务器 发布:2025-03-16 23:27:35 浏览:342
汽车安全配置哪些好 发布:2025-03-16 23:16:42 浏览:174
vcmfc源码 发布:2025-03-16 23:14:17 浏览:503
如何设置禁止访问服务器ip 发布:2025-03-16 23:14:07 浏览:499
linuxloadrunner 发布:2025-03-16 23:12:18 浏览:765
搭建fms服务器 发布:2025-03-16 23:11:27 浏览:978
代码编程图片 发布:2025-03-16 23:09:58 浏览:412
研发加密 发布:2025-03-16 23:09:51 浏览:609
哪些车有配置前后防撞钢梁 发布:2025-03-16 22:55:35 浏览:729
服务器怎么设置外网访问 发布:2025-03-16 22:53:03 浏览:186