我写了一个从YUV_420_888到Bitmap的转换,考虑到以下逻辑(据我所知):
总结该方法:内核的坐标x和y与Y平面(2d分配)的非填充部分的x和y以及输出位图的x和y都是一致的.然而,U平面和V平面具有与Y平面不同的结构,因为它们使用1个字节覆盖4个像素,此外,可能具有多于一个的PixelStride,此外它们可能也有一个可以与Y平面不同的填充.因此,为了通过内核有效地访问U和V,我将它们放入1-d分配并创建索引"uvIndex",该索引给出了在给定的1-d分配中相应的U-和V的位置( x,y)坐标(非填充)Y平面(以及输出位图).
为了保持rs-Kernel的精简,我通过LaunchOptions限制x范围来排除yPlane中的填充区域(这反映了y平面的RowStride,因此可以在内核中忽略).所以我们只需要考虑uvIndex中的uvPixelStride和uvRowStride,即用于访问u值和v值的索引.
这是我的代码:
Renderscript内核,名为yuv420888.rs
#pragma version(1)
#pragma rs java_package_name(com.xxxyyy.testcamera2);
#pragma rs_fp_relaxed
int32_t width;
int32_t height;
uint picWidth, uvPixelStride, uvRowStride ;
rs_allocation ypsIn,uIn,vIn;
// The LaunchOptions ensure that the Kernel does not enter the padding zone of Y, so yRowStride can be ignored WITHIN the Kernel.
uchar4 __attribute__((kernel)) doConvert(uint32_t x, uint32_t y) {
// index for accessing the uIn's and vIn's
uint uvIndex= uvPixelStride * (x/2) + uvRowStride*(y/2);
// get the y,u,v values
uchar yps= rsGetElementAt_uchar(ypsIn, x, y);
uchar …Run Code Online (Sandbox Code Playgroud) 我正在编写一个应用程序,相机是一个必不可少的功能.在这方面,我希望100%确定以下几个方面:
在任何情况下,使用设备的相机并使其在几乎所有目标设备上运行都是非常棘手的(因为现在我很高兴掌握了"旧"相机......).因此,我真的想确定以上几点.非常感谢你的回答.
我知道Proguard(当minifyenabeled设置为true时)会支持Java代码,但是Renderscript脚本呢?有谁知道吗?谢谢.
我拼命想在Android Studio中设置RenderScript.根据本手册http://developer.android.com/guide/topics/renderscript/compute.html#ide-setup我设置了最高可用的renderscriptTargetApi 22和renderscriptSupportModeEnabled为true.我使用buildToolsVersion"22.0.1".有了这个,我可以使用ScriptIntrinsic函数 - 但没有实现编译自编写的RenderScript(尝试20h +现在......).我总是遇到与R-File(红色)相同的问题 - 最迟当我尝试重建项目时.我究竟做错了什么?非常感谢您的帮助.