【发布时间】:2015-02-04 14:09:36
【问题描述】:
我正在从某个相机捕获数据(原始数据数组)。
然后我根据调色板将此数据映射到 RGB 值。
我需要尽快映射它,所以我使用BitmapDdata 并使用指针在不安全的代码段中编辑像素。
public void dataAcquired(int[] data)
{
Bitmap bmp = new Bitmap(width, height);
BitmapData data = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
for (int i = 0; i < data.Length; i++)
{
int x = i % bmp.Width;
int y = i / bmp.Width;
Rgb rgb = mapColors[data[i]];
unsafe
{
byte* ptr = (byte*)data.Scan0;
ptr[(x * 3) + y * data.Stride] = rgb.b;
ptr[(x * 3) + y * data.Stride + 1] = rgb.g;
ptr[(x * 3) + y * data.Stride + 2] = rgb.r;
}
}
bmp.UnlockBits(data);
}
我正在为每个传入的帧执行此操作。它工作正常,但对于 320x240 像素,每帧仍需要大约 30 毫秒。
是否有可能让它更快?也许我只能锁定/解锁内存中的数据一次,但我不确定。
【问题讨论】:
-
我建议
Parallel.For代替 for 循环。 -
这个问题更适合codereview.stackexchange.com
标签: c# performance bitmapdata lockbits