C#OpenGL渲染的图像生成图片

最近在做一款激光雷达的项目,要求将激光雷达的数据绘制为点云,并且定时将渲染的点云保存为图片,同时将此刻的点云数据保存到本地,后续通过图片调出当时的点云数据并重新渲染,目前C#调用OpenGL的库还算方便,且方法与C++高度相似。以下代码为将OpenGL渲染出来的图像生成Bitmap,选用的NuGet上的SharpGL库。


        /// 
        /// 把OpenGL渲染的内容转换为图片。
        /// 
        /// 起始坐标(左下角为0,0)
        /// 起始坐标(左下角为0,0)
        /// 宽度
        /// 高度
        /// 文件名
        /// OpenGL对象
        public void SaveToBitmap(int x, int y, int width, int height, string filename, SharpGL.OpenGL openGL)
        {           
            var lockMode = System.Drawing.Imaging.ImageLockMode.WriteOnly;
            var format = System.Drawing.Imaging.PixelFormat.Format32bppArgb;
            var bitmap = new Bitmap(width, height, format);
            var bitmapRectangle = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
            System.Drawing.Imaging.BitmapData bmpData = bitmap.LockBits(bitmapRectangle, lockMode, format);
            openGL.ReadPixels(x, y, width, height, OpenGL.GL_BGRA, OpenGL.GL_UNSIGNED_BYTE, bmpData.Scan0);
            bitmap.UnlockBits(bmpData);
            bitmap.RotateFlip(RotateFlipType.Rotate180FlipX);
            bitmap.Save(filename);
        }

下图为生成图片的效果:

 C#OpenGL渲染的图像生成图片_第1张图片

 

你可能感兴趣的:(OpenGL)