02 C#截图操作(几种截图方法)

公共函数

获取屏幕截图
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);
    return tSrcBmp;
}
图片灰度化
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); // 转换公式 

                p += 3;  // 跳过3个字节处理下个像素点 
            }
            p += nOffset; // 加上间隔 
        }
    }
    b.UnlockBits(bmData); // 解锁 
    return b;
}

截图方法的具体实现

假定是在坐标为(55,88)的地方截取长宽为(520,233)的矩形,截图时整个背景灰化,截图区域显示原图

使用像素替换的方法

该方法代码最简单,核心函数是 GetPixel 、SetPixel ,但是速度不敢恭维!!!特别慢!!!!!!!!

private Bitmap PixelReplace()
{
    Bitmap tSrcBtm = GetScreenCapture();
    Bitmap tGrayBtm = ImgRgbToGray();             
    for (int i = 55; i < 55 + 520; i++)
    {
        for (int k = 88; k < 88 + 233; k++)
        {
            tGrayBtm.SetPixel(i,k, tSrcBtm.GetPixel(i,k));
        }
    }
    return tGrayBtm;
}

在原图上画图的方法

该方法比较快,但是每次都需要重新绘制,改变了底图

 private Bitmap DrawOnPicture()
 {
     int tAbsWidth = 1;
     Bitmap tSrcBtm = GetScreenCapture();
     Bitmap tGrayBtm = ImgRgbToGray();
     Rectangle tRectArea = new Rectangle(55, 88, 520, 233);
     Rectangle tDrawArea = new Rectangle(55 + tAbsWidth, 88 + tAbsWidth, 520 - tAbsWidth, 233 - tAbsWidth);
     Graphics gp = Graphics.FromImage(tGrayBtm);
     gp.DrawRectangle(Pens.Red, tRectArea);
     gp.DrawImage(tSrcBtm, tDrawArea, tRectArea, GraphicsUnit.Pixel);

     return tGrayBtm;
 }

使用蒙板的方法

实际上也是在在图片上画图,只不过背景上直接画了一个灰色的rect铺满屏幕,而不是取的灰度图

public void CaptureScreen()
{
    // 获取屏幕
    Bitmap btp = GetScreenCapture();
    Image BackScreen = new Bitmap(btp);

    // 在 BackScreen 上绘制蒙板
    Graphics g = Graphics.FromImage(BackScreen);
    g.FillRectangle(new SolidBrush(Color.FromArgb(100, 0, 0, 0)), 0, 0, BackScreen.Width, BackScreen.Height);
    this.BackgroundImage = BackScreen;

    // 最大化
    this.WindowState = FormWindowState.Maximized;

    // 不在任务栏显示
    this.ShowInTaskbar = false;
    this.TopMost = true;

    // 无边框
    this.FormBorderStyle = FormBorderStyle.None;

    // 在坐标为(55,88)的地方截取长宽为(520,233)的矩形
    Rectangle rect = new Rectangle(55, 88, 520, 233);
    g.DrawImage(btp, rect, rect, GraphicsUnit.Pixel);

    this.Show();
}
  • 10
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 「c」是拉丁字母表中的第三个字母,也是英语字母表中的一个字母。无论在中文或英文中,「c」的发音都是/k/。在汉语拼音中,「c」通常与其他字母组合成拼音,例如「ch」(表示声母/cʰ/)、「ci」(表示/ci/)等。 除了字母表示外,「c」还可表示一些其他的意义: 1. 在计算机编程中,「C」是一种编程语言,它由贝尔实验室的Dennis Ritchie在20世纪70年代开发。C语言在软件开发中被广泛应用,被视为学习其他高级编程语言的基础。 2. 在化学中,「C」是碳元素的化学符号。碳是地球上非常常见的元素之一,它在有机物的构成中起着关键作用。 3. 在温度度量中,「C」表示摄氏度,是国际单位制中几种温度单位之一。 总结起来,「c」是一个字母符号,拥有多重意义。无论是作为一个字母、音素还是符号,「c」在不同的语境中具有不同的含义和用途。 ### 回答2: 综述C是一种程序设计语言。C语言是一种通用的高级程序设计语言,由美国计算机科学家贝尔实验室的Dennis Ritchie于1972年在贝尔实验室开发。C语言在计算机科学和软件工程领域广泛应用于系统开发、嵌入式开发和高性能计算等方面。 C语言以其简洁、高效、可移植以及能够直接访问底层硬件等特点深受程序员的喜爱。C语言具有丰富的标准库和广泛的应用领域,可以用于开发各种类型的应用程序,包括操作系统、编译器、数据库系统、图形界面应用和游戏等。 在C语言中,程序由一系列的函数组成,每个函数由函数名、参数列表和函数体组成。C语言支持多种数据类型,包括整型、浮点型、字符型和指针型等。它还提供了丰富的运算符和控制结构,如赋值运算符、算术运算符、条件语句和循环语句等。 C语言以其灵活性和效率而闻名,因此被广泛应用于开发各种系统和应用程序。它为程序员提供了底层访问硬件的能力,使得程序可以更好地与计算机系统交互。C语言也是许多高级编程语言的基础,包括C++、Java和Python等。 总而言之,C语言是一种功能丰富且广泛应用的程序设计语言,以其简洁、高效和可移植的特点在计算机科学和软件工程领域发挥着重要作用。通过学习和掌握C语言,程序员可以更好地开发各种系统和应用程序,并提高计算机科学和软件工程的相关技能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值