我想在Android中以编程方式模糊和解开图像.
我听说在API 14之后不再支持android标志"blur",但我还是想使用Java方法.我的主要问题是从Imageview drawable操纵位图.
我如何从imageview获取位图并对其进行操作(可能会使用高斯模糊)并将其设置回imageview?我认为这个过程涉及提取drawable,将drawable转换为位图,在该位图上执行我的模糊方法,然后反过来直到它再次设置为imageview
但是我希望这个过程拼写出来,谢谢
我想添加模糊动画ImageView,但设置持续时间.所以,例如,我希望图像随着时间的推移而模糊.
我已经有了模糊图像的方法,但我需要的是让它从模糊变为无模糊,比如2秒.
有人可以帮帮我吗?
编辑:这是我目前模糊图像的方法.
public Bitmap blur(Bitmap sentBitmap, int radius) {
// Stack Blur Algorithm by Mario Klingemann <mario@quasimondo.com>
Bitmap bitmap = sentBitmap.copy(sentBitmap.getConfig(), true);
if (radius < 1) {
return (null);
}
int w = bitmap.getWidth();
int h = bitmap.getHeight();
int[] pix = new int[w * h];
Log.e("pix", w + " " + h + " " + pix.length);
bitmap.getPixels(pix, 0, w, 0, 0, w, h);
int wm = w - 1;
int hm = h - 1; …Run Code Online (Sandbox Code Playgroud) 我正在尝试设置模糊背景图像.Android工作室项目可用.但我正在使用eclipse.那么任何人都可以帮助我如何以编程方式设置模糊图像?
如何使用xml而不是Java在放置在布局的图像视图对象中的可绘制图像上添加模糊效果?我想用XML编写这种模糊效果.
有很多地方(包括here)来展示如何使用Renderscript来模糊图像,例如:
@TargetApi(VERSION_CODES.JELLY_BEAN_MR1)
public static Bitmap renderScriptBlur(Context context, Bitmap srcBitmap, @FloatRange(from = 0.0f, to = 25.0f) float radius) {
if (srcBitmap == null)
return null;
Bitmap outputBitmap = null;
RenderScript rs = null;
try {
rs = RenderScript.create(context);
outputBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(outputBitmap);
canvas.drawBitmap(srcBitmap, 0, 0, null);
Allocation overlayAlloc = Allocation.createFromBitmap(rs, outputBitmap);
ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
blur.setInput(overlayAlloc);
blur.setRadius(radius);
blur.forEach(overlayAlloc);
overlayAlloc.copyTo(outputBitmap);
return outputBitmap;
} catch (Exception ex) {
if (outputBitmap != null) …Run Code Online (Sandbox Code Playgroud) 我正在努力使用Android模糊Bitmaps.
我已经看到很多关于使用简单内核的信息
0 0 0 5 0 0 0
0 5 18 32 18 5 0
0 18 64 100 64 18 0
5 32 100 100 100 32 5
0 18 64 100 64 18 0
0 5 18 32 18 5 0
0 0 0 5 0 0 0
Run Code Online (Sandbox Code Playgroud)
我的问题是我真的不确定如何以有效的方式将其与我的Bitmap相乘.
我应该通过每个像素和
image.getPixel(x, y)
Run Code Online (Sandbox Code Playgroud)
同时将这些值存储到一个新数组(所以我不必一遍又一遍地获取这些值),然后遍历数组,并为每个值加上周围的值乘以内核中的相应字段除以1068 (在上述内核的情况下(=所有条目总结))?
有没有更好的方法来做到这一点?边界有一个简单的解决方案吗?
或者在我错过的Android SDK中是否有可用的东西?
使用滑动android库我将图像作为位图(参见滑动文档),然后我尝试使用renderscript和ScriptIntrinsicBlur模糊位图,这是一个高斯模糊.(取自此stackoverflow帖子)
Glide.with(getApplicationContext())
.load(ImageUrl)
.asBitmap()
.into(new SimpleTarget<Bitmap>(300,200) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
RenderScript rs = RenderScript.create(mContext); // context = this. this referring to the activity
final Allocation input = Allocation.createFromBitmap( rs, resource, 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(8f);
script.setInput(input);
script.forEach(output);
output.copyTo(resource);
mImageView.setImageBitmap(resource);
}
});
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感谢谢谢.:)
我正在尝试模糊我的图像,并使用RenderScript在RelativeLayout的背景上显示模糊,应用程序在模拟器中工作,但手机中的应用程序不断崩溃,出现此错误:
08-05 22:21:36.543:E/RenderScript_jni(11549):无GC方法08-05 22:21:36.553:D/dalvikvm(11549):在/system/lib/libRSSupport.so 0x41803ab8中找不到JNI_OnLoad,跳过init 08-05 22:21:36.557:E/dalvikvm(11549):错误:找不到本地方法08-05 22:21:36.557:E/dalvikvm(11549):请求:Landroid/support/v8/renderscript /RenderScript; ._nInit :() V 08-05 22:21:36.558:E/JNIHelp(11549):RegisterNatives因'android/support/v8/renderscript/RenderScript'失败,中止08-05 22:21:36.558: A/libc(11549):0xdeadbaad(代码= 1),线程11549(m.example.login)的致命信号11(SIGSEGV)
这是我在单独的类上的模糊代码:
import android.content.Context;
import android.graphics.Bitmap;
import android.support.v8.renderscript.*;
public class Blur {
public static Bitmap blurBitmap(Context context, Bitmap src) {
Bitmap outBitmap = src.copy(src.getConfig(), true);
final RenderScript rs = RenderScript.create(context);
final Allocation input = Allocation.createFromBitmap(rs, src);
final Allocation output = Allocation.createFromBitmap(rs, outBitmap);
final ScriptIntrinsicBlur script =
ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
script.setRadius(25f);
script.setInput(input);
script.forEach(output);
output.copyTo(outBitmap);
rs.destroy();
return outBitmap;
}
}
Run Code Online (Sandbox Code Playgroud)
这里是MainActivity中的ny代码(我从图库中获取位图):
Uri selectedImageUri = data.getData();
Blur blur …Run Code Online (Sandbox Code Playgroud)