Renderscript 灰度效果不佳
Renderscript Greyscale not quite working
这是我现在的渲染脚本代码:
#pragma version(1)
#pragma rs java_package_name(com.apps.foo.bar)
rs_allocation inPixels;
uchar4 RS_KERNEL root(uchar4 in, uint32_t x, uint32_t y) {
uchar4 pixel = in.rgba;
pixel.r = (pixel.r + pixel.g + pixel.b)/3;
pixel.g = (pixel.r + pixel.g + pixel.b)/3;
pixel.b = (pixel.r + pixel.g + pixel.b)/3;
return pixel;
}
我的 phone 显示了 "greyscaled" 图片。我说 "grayscaled" 因为例如红色,仍然有点红……它是灰色的,但你仍然可以看到它是红色的。我知道我可以使用更复杂的方法,但我现在想坚持使用简单的方法。
我想知道我的 renderscript 代码是否有误。我应该将 char
转换为另一种类型吗?
使用临时变量保存计算结果。否则,在第一行中您要修改 pixel.r
,而在下一行中您将使用它来计算 pixel.g
。难怪你会得到神器。
此外,不要忘记分配 alpha 值以避免 "invisible" 输出出现意外。
此外,我建议不要对 r、g 和 b 使用相同的权重,而是使用如下权重。参见例如http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/
char4 __attribute__((kernel)) gray(uchar4 in) {
uchar4 out;
float gr= 0.2125*in.r + 0.7154*in.g + 0.0721*in.b;
out.r = out.g = out.b = gr;
out.a = in.a;
return out;
}
这是我现在的渲染脚本代码:
#pragma version(1)
#pragma rs java_package_name(com.apps.foo.bar)
rs_allocation inPixels;
uchar4 RS_KERNEL root(uchar4 in, uint32_t x, uint32_t y) {
uchar4 pixel = in.rgba;
pixel.r = (pixel.r + pixel.g + pixel.b)/3;
pixel.g = (pixel.r + pixel.g + pixel.b)/3;
pixel.b = (pixel.r + pixel.g + pixel.b)/3;
return pixel;
}
我的 phone 显示了 "greyscaled" 图片。我说 "grayscaled" 因为例如红色,仍然有点红……它是灰色的,但你仍然可以看到它是红色的。我知道我可以使用更复杂的方法,但我现在想坚持使用简单的方法。
我想知道我的 renderscript 代码是否有误。我应该将 char
转换为另一种类型吗?
使用临时变量保存计算结果。否则,在第一行中您要修改 pixel.r
,而在下一行中您将使用它来计算 pixel.g
。难怪你会得到神器。
此外,不要忘记分配 alpha 值以避免 "invisible" 输出出现意外。
此外,我建议不要对 r、g 和 b 使用相同的权重,而是使用如下权重。参见例如http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/
char4 __attribute__((kernel)) gray(uchar4 in) {
uchar4 out;
float gr= 0.2125*in.r + 0.7154*in.g + 0.0721*in.b;
out.r = out.g = out.b = gr;
out.a = in.a;
return out;
}