gpt4 book ai didi

c++ - 从 RGB 值数组中切出平面(就地)的算法

转载 作者:可可西里 更新时间:2023-11-01 18:39:17 25 4
gpt4 key购买 nike

我有一个字节 RGB 值的平面数组,它是 R1 G1 B1 R2 G2 B2 R3 G3 B3 ... Rn Gn Bn。所以我的数据看起来像:

char imageData[WIDTH * HEIGHT * 3];

但我想将 WIDTH*HEIGHT 数组传递给现有的 C 库,该库需要此数据的单个平面。那将是一个仅包含 R 值(或仅是 G,或仅是 B)的序列。

分配新数组和复制数据非常简单(呃)。但是图像非常大。如果它不是 C 库而是采用某种迭代接口(interface)来巧妙地进行“切片”遍历,那就太好了。但是我无法编辑正在调用的代码...它需要一个指向顺序内存块的普通旧指针。

但是我有这个数组的写权限。创建一个将其分类为颜色平面的例程是可行的。我还需要将其放回去的反向转换,但根据定义,将其分类为平面的相同方法可用于取消分类。

我(就地)将此数组转换为 R1 R2 R3 ... Rn G1 G2 G3 ... Gn B1 B2 B3 ... Bn 然后再返回的效率如何?任何非朴素算法?

最佳答案

如果您只需要一架飞机,这似乎很容易。如果您需要所有 3 个,您可能会更幸运地使用更复杂的算法。

void PlanarizeR(char * imageData, int width, int height)
{
char *in = imageData;
int pixelCount = width * height;
for (int i = 0; i < pixelCount; ++i, in+=3)
std::swap(*in, imageData[i])
}

从高到低反向运行循环以反转过程应该不会太难。

关于c++ - 从 RGB 值数组中切出平面(就地)的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8465950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com