gpt4 book ai didi

c - C 中的位打包

转载 作者:行者123 更新时间:2023-12-04 07:08:13 25 4
gpt4 key购买 nike

我正在尝试将 RGB 图像转换为 ARGB 图像,基本上只是为 alpha channel 添加 255。我想知道是否有任何包装方法可以在没有迭代的情况下做到这一点?所以要遍历我的 RGB 数据并将 255 附加到每个像素。

最佳答案

C 没有“方法”……不,这听起来不像标准库中的任何例程。我认为你需要自己编码,使用这样的东西:

void setAlpha(unsigned char *rgba, int width, int height, int alpha)
{
int x, y;

for(y = 0; y < height; y++)
{
for(x = 0; x < width; x++, rgba += 4)
{
rgba[3] = (unsigned char) alpha;
}
}
}

基本假设:
  • 封装顺序是内存中的 RGBA,即从像素的开头到 alpha 字节的偏移量为 3。
  • 图像与初始地址的左上角像素一起按从右到左、从上到下的顺序存储。
  • 没有填充或任何东西

  • 还要注意循环的顺序;由于缓存,这会对现实世界的性能产生巨大的影响。这段代码依次接触内存中距离较近的像素,这很好地称为“良好的局部性”。

    将指针更改为指向下一个像素而不是说明地址( rgba[4 * y * width + 4 * x + 3] )也是一种优化,并且(对我而言)很容易理解。

    关于c - C 中的位打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/776789/

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