从System.Drawing.Bitmap(任何格式,而不是特定格式)转换为RG B R G B R G B等形式的int []的最有效方法是什么?我不希望位图数据的格式实际上是在内存中布置的(没有步幅,没有填充,没有任何东西),但是我不确定从位图到我需要的最快方法是什么,显然getpixel不是这样,因为它真的很慢,欢迎任何建议。
没有其他库,任何.net都是公平的游戏(包括.net 4.6 / VS 2015 RC)
编辑:3个数组(每个通道一个)也很好,尽管我认为这不会更快地检索。
也许这段代码可以帮助您:
unsafe public SimpleRGBImage(Bitmap bmp)
{
data = new byte[bmp.Width, bmp.Height, 3];
BitmapData bmpData = new BitmapData();
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
bmpData = bmp.LockBits(rect,
ImageLockMode.ReadOnly,
PixelFormat.Format24bppRgb);
byte* Scan0 = (byte*)bmpData.Scan0.ToPointer();
int size = bmp.Width * bmp.Height * 3;
for (int i=0; i<size-1; i++)
{
data[i % bmp.Width, i % bmp.Height, i % 3] = *(Scan0++);
}
bmp.UnlockBits(bmpData);
}