C#:电脑屏幕截图 , RGB图转灰度图片

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;

namespace test {
    public partial class Form1 : Form {
        
        public Form1() {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e) {
            GetScreenCapture();   //屏幕截图
            ImgRgbToGray(new Bitmap(@"G:\新建文件夹\abc.png"));  //转灰度图
        }

        //电脑屏幕截图
        private Bitmap GetScreenCapture() {
            Rectangle tScreenRect = new Rectangle(0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            Bitmap tSrcBmp = new Bitmap(tScreenRect.Width, tScreenRect.Height); // 用于屏幕原始图片保存
            Graphics gp = Graphics.FromImage(tSrcBmp);
            gp.CopyFromScreen(0, 0, 0, 0, tScreenRect.Size);
            gp.DrawImage(tSrcBmp, 0, 0, tScreenRect, GraphicsUnit.Pixel);
            tSrcBmp.Save(@"G:\新建文件夹\abc.png");
            return tSrcBmp;
        }

        //RGB转灰度图片
        public static Bitmap ImgRgbToGray(Bitmap bitmap) {
            Bitmap b = new Bitmap(bitmap);
            BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height),
                                            ImageLockMode.ReadWrite,
                                            PixelFormat.Format24bppRgb);
            int stride = bmData.Stride;   // 扫描的宽度 
            unsafe {
                byte* p = (byte*)bmData.Scan0.ToPointer(); // 获取图像首地址 
                int nOffset = stride - b.Width * 3;  // 实际宽度与系统宽度的距离 
                byte red, green, blue;
                for (int y = 0; y < b.Height; ++y) {
                    for (int x = 0; x < b.Width; ++x) {
                        blue = p[0];
                        green = p[1];
                        red = p[2];

                        p[0] = p[1] = p[2] = (byte)(.299 * red + .587 * green + .114 * blue); // RGB转灰度-转换公式 

                        p += 3;  // 跳过3个字节处理下个像素点 
                    }
                    p += nOffset; // 加上间隔 
                }
            }
            b.UnlockBits(bmData); // 解锁 
            b.Save(@"G:\新建文件夹\abcd.png");
            return b;
        }
        
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38261174/article/details/85266089