我正在从外部系统以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秒的时间才能运行在我的服务器上一个非常强壮的至强处理器上。并行化循环将是微不足道的,但我怀疑有更好的方法来解决这个问题。任何帮助将不胜感激!
SetPixel是非常缓慢,在这里看到更多的信息http://stackoverflow.com/questions/7768711/setpixel-is-too-slow-is-there-a-faster-way-to-draw-to-bitmap – Ragnagord