我正在從外部系統以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