最快的方式从位图到rgb数组
本文关键字:rgb 数组 位图 方式 | 更新日期: 2023-09-27 17:51:12
从System.Drawing.Bitmap(任何格式的,不是特定的)转换成int[] (R G B R G B R G B等)的最有效方法是什么?我不想要位图数据的格式,它实际上是在内存中布局(没有跨步,没有填充,没有什么),但我不确定什么是从位图到我需要的最快的方式,显然getpixel不是方式,因为它真的很慢,欢迎任何建议。
额外的库不是一个选项,任何。net都是公平的游戏(包括。net 4.6/VS 2015 RC)
edit: 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);
}