我从外部系统接收图像,格式为一系列 BGR 值,后跟一个空字节。序列看起来有点像......
[B,G,R,0,B,G,R,0,...,B,G,R,0] 其中每个 BGR0 是图像中的单个像素。
我需要在 .NET 位图中使用它,这样我就可以对其进行一些操作,并提出了以下功能:
private Bitmap fillBitmap(byte[] data, int width, int height)
{
Bitmap map = new Bitmap(width, height);
for (int i = 0; i < data.Length; i += 4)
{
int y = ((i / 4) / width);
int x = ((i / 4) - (y * width));
int b = data[i];
int g = data[i + 1];
int r = data[i + 2];
Color pixel = Color.FromArgb(r, g, b);
map.SetPixel(x, y, pixel);
}
return map;
}
这通常没问题,除了我的大多数图像都是 1920x1200 ......所以我有一个迭代超过 200 万次的循环。即便如此,这也不会那么糟糕,因为 200 万次迭代对任何现代处理器都不会造成太大负担。
但由于某种原因,这个循环可能需要 5-15 秒以上才能在我的服务器上相当强大的 Xeon 上运行。并行化循环将是微不足道的,但我怀疑有更好的方法来解决这个问题。任何帮助将不胜感激!