Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Renderscript文档和建议-Android_Android_Renderscript - Fatal编程技术网

Renderscript文档和建议-Android

Renderscript文档和建议-Android,android,renderscript,Android,Renderscript,关于如何在Android上使用渲染脚本,我一直遵循此指南 我的代码如下(我为脚本获得了一个包装器类): 此方法调用脚本: public class PixelCalcScriptWrapper { private Allocation inAllocation; private Allocation outAllocation; RenderScript rs; ScriptC_pixelsCalc script; public PixelCalcS

关于如何在Android上使用渲染脚本,我一直遵循此指南

我的代码如下(我为脚本获得了一个包装器类):

此方法调用脚本:

public class PixelCalcScriptWrapper {

    private Allocation inAllocation;
    private Allocation outAllocation;
    RenderScript rs;
    ScriptC_pixelsCalc script;

    public PixelCalcScriptWrapper(Context context){
        rs = RenderScript.create(context);
        script = new ScriptC_pixelsCalc(rs, context.getResources(), R.raw.pixelscalc);
    };

    public void setInAllocation(Bitmap bmp){
        inAllocation = Allocation.createFromBitmap(rs,bmp);
    };

    public void setOutAllocation(Bitmap bmp){
        outAllocation = Allocation.createFromBitmap(rs,bmp);
    };

    public void forEach_root(){
        script.forEach_root(inAllocation, outAllocation);
    }
}
public Bitmap processBmp(Bitmap bmp, Bitmap bmpCopy) {

    pixelCalcScriptWrapper.setInAllocation(bmp);
    pixelCalcScriptWrapper.setOutAllocation(bmpCopy);
    pixelCalcScriptWrapper.forEach_root();

    return bmpCopy;
};
这是我的剧本:

#pragma version(1)
#pragma rs java_package_name(test.foo)

void root(const uchar4 *in, uchar4 *out, uint32_t x, uint32_t y) {
    float3 pixel = convert_float4(in[0]).rgb;

    if(pixel.z < 128) {
        pixel.z = 0;
    }else{
        pixel.z = 255;
    }
    if(pixel.y < 128) {
        pixel.y = 0;
    }else{
        pixel.y = 255;
    }
    if(pixel.x < 128) {
        pixel.x = 0;
    }else{
        pixel.x = 255;
    }

    out->xyz = convert_uchar3(pixel);
}
布拉格语版本(1) #pragma rs java_包_名称(test.foo) 空根(常量uchar4*in、uchar4*out、uint32\u t x、uint32\u t y){ float3像素=convert_float4(在[0]).rgb; 如果(像素z<128){ 像素z=0; }否则{ 像素z=255; } 如果(像素y<128){ 像素y=0; }否则{ 像素y=255; } 如果(像素x<128){ 像素x=0; }否则{ 像素x=255; } out->xyz=转换为3(像素); } 现在我在哪里可以找到一些关于这个的文档

例如,我有以下问题:

1) 这个
转换\u float4(在[0]中)的功能是什么

2)
rgb
在这里返回什么
convert_float4(在[0]).rgb

3) 什么是浮动3

4) 我不知道从哪里开始这行
out->xyz=convert\u uchar3(像素)

5) 我假设在参数中,
in
out
是否传递了分配? 什么是内核中的
x
y

1)中的
指针是一个4元素无符号字符,也就是说,它表示一个像素颜色,其中R、G、B和a的值在0-255范围内。因此,
convert\u float4
只需将四个
uchar
中的每一个转换为
float
。在您正在使用的这段特定代码中,使用浮点数可能没有多大意义,因为您正在执行一个简单的阈值,您也可以直接使用uchar数据。在执行其他类型的图像处理算法时,如果确实需要更高的精度(例如:模糊图像),则使用浮点更适合

2)
.rgb
后缀是仅返回
float4
的前三个值的缩写,即R、G和B值。如果您只使用了
.r
它会将第一个值作为常规的
浮点
,如果您使用了
.g
它会将第二个值作为
浮点
,以此类推。。。然后将这三个值指定给该
float3
变量,该变量现在仅表示具有三个颜色通道(即,没有alpha通道)的像素

3) 见#2

4) 现在,
convert\u uchar3
又是另一个转换,它将
float3
像素变量转换回
uchar3
变量。您正在按该顺序将这三个值指定给x、y和z元素中的每一个。这可能是一个很好的时机来提及X、Y和Z与R、G和B完全可互换。该语句也可以使用
out->rgb
,这样实际上会更具可读性。请注意,
out
是一个
uchar4
,通过这样做,您只分配了该指针中的前三个“rgb”或“xyz”元素,而第四个元素在此未定义

5) 是,
in
是输入像素,
out
是输出像素。然后
x
y
是整个图像中像素的x和y坐标。该内核函数将为您处理的图像/分配中的每个像素调用一次,因此,通常最好知道处理图像时的坐标。在这个特定的例子中,因为它只是以相同的方式对所有像素设置阈值,所以坐标是不相关的

很难找到关于RenderScript的好文档。不过,我强烈建议您看看这两个视频,因为它们会让您更好地了解RenderScript的工作原理:

请记住,这两个视频都有几年的历史了,因此最近的API中的一些小细节可能已经改变,但总体而言,这些可能是RS的最佳信息源。

1)在内核中,
中的
指针是一个4元素无符号字符,即它用R,G表示像素颜色,B和A值在0-255范围内。因此,
convert\u float4
只需将四个
uchar
中的每一个转换为
float
。在您正在使用的这段特定代码中,使用浮点数可能没有多大意义,因为您正在执行一个简单的阈值,您也可以直接使用uchar数据。在执行其他类型的图像处理算法时,如果确实需要更高的精度(例如:模糊图像),则使用浮点更适合

2)
.rgb
后缀是仅返回
float4
的前三个值的缩写,即R、G和B值。如果您只使用了
.r
它会将第一个值作为常规的
浮点
,如果您使用了
.g
它会将第二个值作为
浮点
,以此类推。。。然后将这三个值指定给该
float3
变量,该变量现在仅表示具有三个颜色通道(即,没有alpha通道)的像素

3) 见#2

4) 现在,
convert\u uchar3
又是另一个转换,它将
float3
像素变量转换回
uchar3
变量。您正在按该顺序将这三个值指定给x、y和z元素中的每一个。这可能是一个很好的时机来提及X、Y和Z与R、G和B完全可互换。该语句也可以使用
out->rgb
,这样实际上会更具可读性。请注意,
out
是一个
uchar4
,通过这样做,您只分配了该指针中的前三个“rgb”或“xyz”元素,而第四个元素在此未定义

5) 是,
in
是输入像素,
out
是输出像素。然后
x