我正在尝试将 RGB 图像转换为 ARGB 图像,基本上只是为 alpha 通道添加 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])也是一种优化,并且(对我来说)很容易理解。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top