从 SDK 中,我得到了像素格式 BGR 打包的图像,即BGRBGRBGR
. 对于另一个应用程序,我需要将此格式转换为 RGB 平面RRRGGGBBB
。
我正在使用 C# .NET 4.5 32bit 并且数据位于具有相同大小的字节数组中。
现在我正在遍历数组源并将BGR
值分配到目标数组中的适当位置,但这需要太长时间(对于 1.3 百万像素的图像需要 180 毫秒)。运行代码的处理器可以访问 MMX、SSE、SSE2、SSE3、SSSE3。
有没有办法加快转换速度?
编辑:这是我正在使用的转换:
// the array with the BGRBGRBGR pixel data
byte[] source;
// the array with the RRRGGGBBB pixel data
byte[] result;
// the amount of pixels in one channel, width*height
int imageSize;
for (int i = 0; i < source.Length; i += 3)
{
result[i/3] = source[i + 2]; // R
result[i/3 + imageSize] = source[i + 1]; // G
result[i/3 + imageSize * 2] = source[i]; // B
}
编辑:我尝试将源数组的访问分成三个循环,每个通道一个,但它并没有真正帮助。所以我愿意接受建议。
for (int i = 0; i < source.Length; i += 3)
{
result[i/3] = source[i + 2]; // R
}
for (int i = 0; i < source.Length; i += 3)
{
result[i/3 + imageSize] = source[i + 1]; // G
}
for (int i = 0; i < source.Length; i += 3)
{
result[i/3 + imageSize * 2] = source[i]; // B
}
Bump 因为这个问题仍然没有答案。任何建议都非常感谢!