C#使用不安全指针来操作bitmap

C#允许通过不安全指针实现像C++一样操作指针,这个速度是最快的。下面这个例子是修改一幅RGB图像的每个像素值,速度很快,测试一张2592*1944的彩色图像,只需要几ms就能够全部遍历。

        /// <summary>
        /// 操作彩色图像
        /// </summary>
        /// <param name="bitmap"></param>
        private void GetRBBytes(Bitmap bitmap)
        {
            if (bitmap != null)
            {
                int width = bitmap.Width;
                int height = bitmap.Height;
                int length = height * 3 * width;
                BitmapData data = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);//将图像放入内存
                System.IntPtr Scan0 = data.Scan0;//获取指针头
                int stride = data.Stride;//获取图像跨距宽度
                int Tempcount = 0;
                unsafe
                {
                    byte* p = (byte*)Scan0;//获取首个图像像素的地址
                    int offset = stride - width * 3;
                    for (int y = 0; y < height; y++)
                    {
                        for (int x = 0; x < width; x++)
                        {
                            p[0] = (byte)20;//B
                            p[1] = (byte)73;//G
                            p[2] = (byte)100;//R
                        }
                        p += offset;
                    }
                    count = Tempcount;
                }
                bitmap.UnlockBits(data);
                this.pb_imageRgb.Image = bitmap;
            }
        }

 

posted @ 2022-03-07 20:20  WellMandala  阅读(392)  评论(0编辑  收藏  举报