我有一个RGB数据矢量。
vector<int> image({1,1,1, 2,2,2, 3,3,3 , 4,4,4});
我想水平翻转此图像(关于中间列)。
执行翻转操作,我创建了一个函数
flip(void* image, int rows, int cols)
我想要执行翻转,但保持RGB的三维完整
所以我创建了一个
struct color{
char r;
char g;
char b;
};
并将该函数调用为
int main(){
vector<int> image({1,1,1, 2,2,2, 3,3,3 , 4,4,4});
flip(&image[0],rows,cols);
}
但是将void *转换为struct color []会引发编译错误。 我该如何处理?
答案 0 :(得分:1)
您无法在C ++中强制转换为数组。你必须使用指针。
struct color* image = (struct color*)arr;
为了您的目的,这不会立即起作用。您必须开始使用char
而不是int
的向量。这是因为int
通常是4个字节,char是1个字节。试图为你的结构分配int
(这是3个字节)不会给你你期望的结果。
然后您可以将指针作为数组访问。例如,image[0].r
将返回向量中的第一个值,image[1].r
将返回第四个值。请注意不要超出矢量的大小。
答案 1 :(得分:0)
我将结构更改为
struct color{
int rgb[3];
};
和
struct color* image = (struct color*)arr;
提供了一个struct颜色数组,可以翻转,保持rgb数据不变。