C#使用不安全指针来操作bitmap
阅读原文时间:2023年07月10日阅读:3

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

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章