【发布时间】:2023-04-09 08:11:02
【问题描述】:
从 SDK 中,我得到了像素格式 BGR 打包的图像,即BGRBGRBGR。对于另一个应用程序,我需要将此格式转换为 RGB 平面 RRRGGGBBB。
我正在使用 C# .NET 4.5 32 位,数据位于具有相同大小的字节数组中。
现在我正在遍历数组源并将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
}
顶一下,因为这个问题仍然没有答案。任何建议都非常感谢!
【问题讨论】:
-
当原始转换不可用时,任何人都很难看到是否可以进行更快的转换
-
请显示一些您当前方法的代码
-
投票重新开放。说真的,他不是要图书馆。即使给出了代码,我也可以通过重写它看到几种方法来加速它 - 显着地 - 。在没有第三方库的情况下,在 .NET 框架/Visual Studio 标准生态系统中有有效的答案。
-
为了记录,我 vtc'ed 因为没有代码示例就不清楚。投票重新开放
-
我真的很想听听你的想法,TomTom。但显然,让问题回到主题上是不会发生的?
标签: c# image-processing intrinsics pixelformat