我知道我可以在 Android 上使用 RenderScript 来模糊图像,但有人知道我是否可以将相同的方法应用于视频视图,以便我的完整视频是高斯模糊的?
我正在使用camera2 API来获取格式的图像流ImageFormat.YUV_420_888。我需要使用一个库对它们进行一些处理,该库需要将图像作为 RGB 字节数组发送(因此byte array length = width * height * 3)
我使用这个线程(也可能是所有其他线程)将图像转换为 RGB 字节数组(这似乎有效,至少结果字节数组是我需要的)。
另外,这是我在 Kotlin 中用于将 YUV_420 转换为 RGB 的确切代码,并进行了一些更新:https://gist.github.com/VictorMotogna/e7a8493af65be994f29f5508660dd4a9
A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xe00000084 in tid 20776 (package name), pid 20776问题是几次尝试后转换崩溃并显示消息。
我尝试过其他图像格式、其他转换,但似乎没有任何效果 - 我要么遇到相同的崩溃(使用 YUV_420 或 NV21 时),要么无法获得正确的图像/转换。
似乎有帮助的一件事是:android:hardwareAccelerated="false"应用程序在运行次数比运行次数多得多后崩溃android:hardwareAccelerated="true"
有谁知道如何修理它?
有没有人知道Android 3.0中的Renderscript
另外我想知道OpenGL和RenderScript之间的区别
如果你知道提供一些很好的例子或演示链接
谢谢.
OpenCL不支持递归.CUDA确实如此,但仅限于某个版本.最初的搜索显示的renderScript 不支持递归,但我找不到任何明确的.
RenderScript是否支持递归函数调用?
我在尝试实现一些用Renderscript for Android编写的代码时遇到了不同的麻烦.首先让我说我的所有SDK包都是22.3版本的最新版本,包括Ecplise ADT和Build-Tools 19.0.0.
我的目的是在各种Android平台上实现一些高计算图像算法,可能从API 8开始.为此,我renderscript-v8在我的Ecplise项目中设置了对库的引用,同时将应用程序定位到API 19.
我有两个Android设备要测试,第一个是Android 4.3(API 18),第二个是Android 2.2(API 8).我在运行这段代码时遇到了不同的异常,它调用了ScriptIntrinsicYuvToRGB(代码部分取自Executing ScriptIntrinsicYuvToRgb问题):
/* --------------
   global vars */
private RenderScript rs;
private ScriptIntrinsicYuvToRGB rs_YUVtoRGB;
private Allocation rs_YUVtoRGB_in;
private Allocation rs_YUVtoRGB_out;  
/* --------------
in constructor... */
this.rs = RenderScript.create(this.getContext());
this.rs_YUVtoRGB = ScriptIntrinsicYuvToRGB.create(this.rs, Element.U8_4(rs));
Type.Builder tb_in = new Type.Builder(this.rs, Element.createPixel(this.rs, Element.DataType.UNSIGNED_8, Element.DataKind.PIXEL_YUV));
tb_in.setX(prevWidth);
tb_in.setY(prevHeight);
tb_in.setMipmaps(false);
tb_in.setYuvFormat(this.camera.getParameters().getPreviewFormat());
this.rs_YUVtoRGB_in = Allocation.createTyped(this.rs, tb_in.create(), Allocation.USAGE_SCRIPT);
Type.Builder tb_out = new Type.Builder(this.rs, Element.RGBA_8888(this.rs));
tb_out.setX(prevWidth);
tb_out.setY(prevHeight);
tb_out.setMipmaps(false);
this.rs_YUVtoRGB_out = Allocation.createTyped (this.rs, tb_out.create(), …我要感谢Stephen在上一篇文章中的快速回复.这是本文的后续问题为什么非常简单的Renderscript在GPU中运行速度比在CPU中慢3倍
我的开发平台如下
Development OS: Windows 7 32-bit
Phone: Nexus 5
Phone OS version: Android 4.4
SDK bundle: adt-bundle-windows-x86-20131030
Build-tool version: 19
SDK tool version: 22.3
Platform tool version: 19
为了评估Renderscript GPU计算的性能并掌握Renderscript使代码更快的一般技巧,我做了以下测试.
我使用标签android-4.2.2_r1.2检查了Google的Android开源项目中的代码.我之所以使用这个标签,是因为ImageProcessing测试样本在较新版本中不可用.
然后我在测试中使用了"base\tests\RenderScriptTests\ImageProcessing"下的项目.我在GPU上记录了运行代码的性能以及CPU,性能如下所示.
                         GPU    CPU
Levels Vec3 Relaxed     7.45ms  14.89ms
Levels Vec4 Relaxed     6.04ms  12.85ms
Levels Vec3 Full        N/A     28.97ms
Levels Vec4 Full        N/A     35.65ml
Blur radius 25          203.2ms 245.60ms
Greyscale               7.16ms  11.54ms
Grain                   33.33ms 21.73ms
Fisheye Full            N/A     51.55ms
Fisheye Relaxed         92.90ms 45.34ms
Fisheye Approx Full     N/A     51.65ms …我是RenderScript的新手,对Java层调用的阻塞/非阻塞性质仍然不太了解.一般问题是:哪些情况会阻止代码并允许RenderScript完成.尤其:
forEach_kernel()并且没有阻塞 - 我不得不添加一个额外的内容,Allocation.copyTo()以便我可以使用结果.有另一种方式吗?script.invoke_somefunc()调用然后立即调用是否有危险script.forEach_kernel()?我用Androids Rederscript模糊了一个位图
private Bitmap createBitmap_ScriptIntrinsicBlur(Bitmap src, float r) {
    //Radius range (0 < r <= 25)
    if(r <= 0){
        r = 0.1f;
    }else if(r > 25){
        r = 25.0f;
    }
    Bitmap bitmap = Bitmap.createBitmap(src.getWidth(), src.getHeight(),Bitmap.Config.ARGB_8888);
    RenderScript renderScript = RenderScript.create(getActivity());
    Allocation blurInput = Allocation.createFromBitmap(renderScript, src);
    Allocation blurOutput = Allocation.createFromBitmap(renderScript, bitmap);
    ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(renderScript,Element.U8_4(renderScript));
    blur.setInput(blurInput);
    blur.setRadius(r);
    blur.forEach(blurOutput);
    blurOutput.copyTo(bitmap);
    renderScript.destroy();
    return bitmap;
}
但图像不够模糊.有没有可能模糊半径超过25的图像.当我多次调用模糊功能时,图像会像单个函数调用一样模糊.所以这也不起作用.
谢谢您的帮助.
我正在做两个项目; 一个更小(我会称之为ProjectA),而另一个则相当大(ProjectB).两个项目都使用相同的库,即IMG.LY的Photo Editor SDK.对于这两个项目,我遵循了库的文档中的简单集成步骤.
ProjectA使用自定义Activity来显示和选择图像,而ProjectB只是使用简单的ACTION_PICK意图来选择图像.两个项目都有类似的方法来PhotoEditorActivity选择图像后启动; 除了ProjectA接受File参数的方法,而另一个接受一个Uri:
private void dispatchEditorIntent(File file /* Uri uri */) {
    new PhotoEditorIntent(getActivity())
            .setExportDir(PhotoEditorIntent.Directory.PICTURES, getString(R.string.app_name))
            .setExportPrefix(Constants.PREFIX_EDITOR)
            .setSourceImagePath(file.getAbsolutePath()) // uri.getPath() for ProjectB
            .destroySourceAfterSave(false)
            .startActivityForResult(REQUEST_EDITOR);
}
如果我在任一项目中选择相同的图像,file.getAbsolutePath()或者uri.getPath()方法将返回相同的图像String; 例如:
/storage/emulated/0/Pictures/IMG_20160929_145318_395198580.jpeg
ProjectA工作正常,但在ProjectB当dispatchEditorIntent被调用时,我遇到了一个巨大的错误消息.为简洁起见,我只包括每个错误和警报日志的前10行:
09-29 14:53:26.585 4272-4272/com.example.projectb E/art: Failed to register native method android.support.v8.renderscript.RenderScript.nDeviceDestroy(J)V …我正在使用支持renderscript和android支持库25.1.0,我在模块build.gradle中收到此警告:
所有com.android.support库都必须使用完全相同的版本规范(混合版本可能导致运行时崩溃)。找到版本25.1.0、25.0.2。示例包括com.android.support:animated-vector-drawable:25.1.0和com.android.support:renderscript:25.0.2
这是我的代码,以获得renderscript支持库:
android{
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
       ...
       targetSdkVersion 25
       versionCode Integer.valueOf(versionId)
       versionName version
       renderscriptTargetApi 20
       renderscriptSupportModeEnabled true
       multiDexEnabled true
       minSdkVersion minSdk
 }
}
似乎支持renderscript版本与构建工具链接在一起。。。如何在不使用较低的android支持库版本的情况下解决此问题?
renderscript ×10
android ×9
android-ndk ×1
bitmap ×1
blur ×1
eclipse ×1
gpgpu ×1
rgb ×1
yuv ×1