从位图到rgb数组的最快方法?

问题描述 投票:0回答:1

从System.Drawing.Bitmap(任何格式,而不是特定格式)转换为RG B R G B R G B等形式的int []的最有效方法是什么?我不希望位图数据的格式实际上是在内存中布置的(没有步幅,没有填充,没有任何东西),但是我不确定从位图到我需要的最快方法是什么,显然getpixel不是这样,因为它真的很慢,欢迎任何建议。

没有其他库,任何.net都是公平的游戏(包括.net 4.6 / VS 2015 RC)

编辑:3个数组(每个通道一个)也很好,尽管我认为这不会更快地检索。

c# .net bitmap
1个回答
0
投票

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

            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);
            }
© www.soinside.com 2019 - 2024. All rights reserved.