我正在开展PCL项目(Point Cloud Library,www.pointclouds.org) 通过这个库,我可以获得我的Kinect正在查看的内容的3D表示。 问题是,我正在使用这个结构:
typedef union
{
struct
{
unsigned char Blue;
unsigned char Green;
unsigned char Red;
unsigned char Alpha;
};
float float_value;
uint32_t long_value;
} RGBValue;
我想对这个结构做什么,是从每种颜色中获取单个数据并将它们放在浮点数中:
float R = someCloud->points[idx].rgba.Red;
float G = someCloud->points[idx].rgba.Green;
float B = someCloud->points[idx].rgba.Blue;
float A = someCloud->points[idx].rgba.Alpha;
我得到的错误是:
error C2039: 'Red' : is not a member of 'System::UInt32'*
答案 0 :(得分:7)
您必须相应地命名您的匿名结构实例
typedef union
{
struct
{
unsigned char Blue;
unsigned char Green;
unsigned char Red;
unsigned char Alpha;
} rgba;
float float_value;
uint32_t long_value;
} RGBValue;
然后,您可以访问
成员RGBValue v;
float R = v.rgba.Red;
float G = v.rgba.Green;
float B = v.rgba.Blue;
float A = v.rgba.Alpha;
答案 1 :(得分:1)
此:
typedef union
{
struct
{
unsigned char Blue;
unsigned char Green;
unsigned char Red;
unsigned char Alpha;
};
float float_value;
uint32_t long_value;
} RGBValue;
使用嵌套struct type 声明union type 。联合只包含float
或uint32_t
- 您从未声明嵌套结构的实例。
您可以为您的类型命名,以便在其他地方使用它:
typedef union
{
struct RGBA // named struct type
{
unsigned char Blue;
unsigned char Green;
unsigned char Red;
unsigned char Alpha;
};
RGBA rgba; // AND an instance of that type
float float_value;
uint32_t long_value;
} RGBValue;
或保持匿名类型,只是声明一个实例,正如奥拉夫所示。 (我的示例中的命名类型可以称为RGBValue::RGBA
)