最快的方式从位图到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个数组(每个通道一个)也很好,尽管我认为这不会更快地检索

最快的方式从位图到rgb数组

也许这段代码可以帮助你:

            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);
            }