我最近刚刚获得了Galaxy S7到Android 7.0.0的更新,发现了一些奇怪的东西。
以前工作的ScriptIntrinsicBlur现在产生了部分透明的结果。两者都在SupportLibrary版本和原生版本上。
我追踪它取决于模糊半径,一般来说,半径越大,结果越不透明。
所以我对完全不透明的图片上的0到25(允许范围)像素的半径进行了扫描测试。
Android Emulator x86 API 24:
authentication_classes
因此,这会为所有半径创建一些透明度,但不明显。
Galaxy S7,API 24,版本:NRD90M.G930FXXU1DQAO:
blurRad: 0.025 alpha: 254
...
blurRad: 25.0 alpha: 254
Galaxy S7 alpha over blur radius
为了完整性,我在带有API 24的arm64仿真器上运行测试,它为所有半径生成完全不透明的结果。
结果与要模糊的位图大小及其内容无关(只要源alpha为255)
此外,我注意到ScriptIntrinsicBlur比以前慢了大约8-10倍。即使在HTC上,我也能用800fps模糊400x400px图像,而Galaxy S7(API 24)只能达到90-100fps。
所以问题:有人可以重现这个并且有解决方法吗?
答案 0 :(得分:3)
Galaxy S7的驱动程序中存在一个错误。这会影响带有Mali GPU的S7手机。那些使用Adreno GPU的用户不受影响。即将发布更新。
答案 1 :(得分:1)
我觉得S7上的GPU RenderScript驱动程序有问题。
您可以尝试以下命令:
adb shell setprop debug.rs.default-CPU-driver 1
然后杀死你的app并重启它。如果行为变得正常,我们确定GPU驱动程序有问题,至少对于某些输入图像而言。
如果是这样,有解决方法绕过GPU驱动程序,只有在代码找到API24 S7之后才会这样做:
CREATE_FLAG_LOW_LATENCY
标志创建上下文。 RenderScript.create(ctx, RenderScript.ContextType.NORMAL, CREATE_FLAG_LOW_LATENCY)
RenderScript.forceCompat();
RenderScript.create(ctx)
醇>