我正在尝试将 RGB 图像转换为 ARGB 图像,基本上只是为 alpha 通道添加 255。我想知道是否有任何打包方法可以在没有迭代的情况下做到这一点?所以要遍历我的 RGB 数据并将 255 附加到每个像素。
Matthew Lloyd
问问题
1669 次
1 回答
3
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]
) 也是一种优化,并且(对我而言)很容易理解。
于 2009-04-22T11:41:23.260 回答