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页。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...