如何解决OpenCL强制转换将float4组件转换为uchars
我有一个OpenCL程序,可以计算像素RGB值。声明如下。
__kernel void pixel_kernel( __global uchar* r,__global uchar* g,__global uchar* b,__global uchar* a,__global int* width,__global int* height)
在程序运行期间,将创建并计算float4 col变量。因此,我想提取RGB分量并将其作为r g b和uchar类型返回。
在代码结尾处
r[x]=255;
g[x]=0;
b[x]=0;
愉快地编译,返回的颜色为红色。
如果我尝试将float4值转换为RGB,我似乎无法弄清楚如何投射它们。例如,以下结果导致编译错误,而cl无法运行
r[x]=(uchar)(col[0]*255);
g[x]=(uchar)(col[1]*255);
b[x]=(uchar)(col[2]*255);
我想念什么?应该如何声明此强制转换,以便正确将float RGB分量转换为介于0到255之间的uchar值?
必须是一个简单的修复程序,但是我尝试了所有我能想到的类型转换,但它们似乎都不希望起作用。感谢您的提示。
解决方法
OpenCL float4
数据类型包含4 float
。要解决这些组件,可以使用.x
,.y
,.z
,.w
或.s0
,.s1
,.s2
,.s3
:
float4 col = (float4)(0.1f,0.2f,0.3f,0.4f);
r[x]=(uchar)(col.s0*255);
g[x]=(uchar)(col.s1*255);
b[x]=(uchar)(col.s2*255);
a[x]=(uchar)(col.s3*255);
float4 col;
与4向量float col[4];
不同,而更像是C99结构;这就是为什么像col[0]
这样的地址不适用于float4
的原因。另请参见OpenCL 1.2 Reference Card第3页。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。