屏幕截图窗口窗体

Posted

技术标签:

【中文标题】屏幕截图窗口窗体【英文标题】:screenshot windowsform 【发布时间】:2018-11-12 16:03:07 【问题描述】:

我在 windows 窗体上绘制图形,而不是在图片框上。我想将我的 Windows 窗体的视图保存到桌面上的特殊文件夹中。我不知道制作屏幕截图是否更好,或者我应该尝试将其保存为我的文件夹中的图像(位图)。 通常我尝试了这两个选项,但它不起作用:( 我把我的尝试之一放在这里...

   public void Form1_Paint(object sender, PaintEventArgs e)

    int x1, y1, x2, y2;
    Random losowa1 = new Random();
    x1 = losowa1.Next(0, 200);
    y1 = losowa1.Next(120, 300);
    x2 = losowa1.Next(300, 480);
    y2 = losowa1.Next(120,300);
    e.Graphics.FillRectangle(Brushes.Black, x1, y1, 100, 100);
    e.Graphics.FillEllipse(Brushes.Black, x2, y2, 100, 100);

   Bitmap bitmap = new Bitmap(this.Width, this.Height);
    DrawToBitmap(bitmap, new Rectangle(0, 0, bitmap.Width, bitmap.Height));
    bitmap.Save("@C:\\Desktop", ImageFormat.Jpeg);
   // MessageBox.Show("saved");

   System.Threading.Thread.Sleep(1000);
   this.Close();

 

private void button1_Click(object sender, EventArgs e)

    for (int i = 0; i < 3; i++)
    
        Form1 OknoStart = new Form1();
        OknoStart.ShowDialog();


 

【问题讨论】:

Capture screenshot of active window?的可能重复 你为什么要在表格上画画?在位图上绘制并将其显示为表单的背景图像似乎更明智。另请注意,无论您认为Thread.Sleep(1000); 在那里做什么,它都不是。它只会阻塞你的 UI 线程。使用适当的事件来表示操作完成。 【参考方案1】:

试试这个

 int i;
   public Form1(int i)
        
            InitializeComponent();
            this.i = i;
        

private void Form1_Load(object sender, EventArgs e)
        
            using (Bitmap bmp = new Bitmap(this.Width, this.Height))
            
                this.DrawToBitmap(bmp, new Rectangle(Point.Empty, bmp.Size));
               bmp.Save(@"C:\Users\User\Desktop\sample" + i+".png", ImageFormat.Png);
            
        

 private void Form1_Paint(object sender, PaintEventArgs e)
        
            int x1, y1, x2, y2;
            Random losowa1 = new Random();
            x1 = losowa1.Next(0, 200);
            Random losowa2 = new Random();
            y1 = losowa2.Next(0, 480);
            Random losowa3 = new Random();
            x2 = losowa1.Next(300, 500);
            Random losowa4 = new Random();
            y2 = losowa2.Next(0, 480);
            e.Graphics.FillRectangle(Brushes.Black, x1, y1, 100, 100);
            e.Graphics.FillEllipse(Brushes.Black, x2, y2, 100, 100);
            System.Threading.Thread.Sleep(2000);
            this.Close();
        




   private void button1_Click(object sender, EventArgs e)
        
            for (int i=0;i<3;i++) 
                Form1 form1 = new Form1(i);
                form1.ShowDialog();

            
        

【讨论】:

感谢您的回答我尝试这样做但文件夹仍然是空的:(我检查了权限,它似乎很好:( 尝试像这样保存图片路径 D:\Stackimage\ 尝试我的新更新答案文件夹路径,例如“C:\Users\User\Desktop\sample”+ i+“.png” 第一个路径有效,但前提是我使用您的代码制作新项目。我是我的,它不行。我正在尝试修复它。再次感谢您 我认为您的文件夹路径错误...试试这个 C:\Users\User\Desktop\sample 一段时间“用户”文件夹名称不同

以上是关于屏幕截图窗口窗体的主要内容,如果未能解决你的问题,请参考以下文章

C#制作截图软件时,怎样不截取软件窗口本身? 看下图:软件自身也被截下来了

Xamarin 窗体:Windows 10 通用应用程序阻止屏幕截图

替代快速截取窗口的屏幕截图

自动截取程序窗口的屏幕截图

在C#中如何实现winform窗体的全屏截图功能

当程序成为前台窗口时,我的代码会截取程序的屏幕截图。屏幕截图的时间出现了一个小问题