如何在用户屏幕的特定坐标处截取屏幕截图并将其另存为example.jpeg c#?

时间:2018-12-28 00:45:24

标签: c# image graphics bitmap save

我想用左上角P,宽度w和高度h截屏,然后保存。

我尝试过了。 Take screenshot at specified coordinates。不起作用,或者我不知道如何使其起作用。

然后我尝试保存剪贴板,但也没有用。

SendKeys.SendWait("%{PRTSC}"); 
Bitmap bp = new Bitmap(Clipboard.GetImage());
bp.Save(@"C:\Users\hasht\spamImages\work.png", ImageFormat.Jpeg);

我也尝试过

private Bitmap bitmap;
private Graphics graph;
... 
graph.CopyFromScreen(new Point(1600, 0), new Point(1920, 0), new Size(320, 300));
Bitmap bp = new Bitmap(320, 300, graph);
bp.Save(@"C:\Users\hasht\spamImages\work.png", ImageFormat.Jpeg);

,但是图形为空,因为我从未创建它。原来您无法创建图形对象。我该如何截取左上角P,宽度w和高度h的屏幕截图,然后保存它?

2 个答案:

答案 0 :(得分:1)

尝试:

    Bitmap printscreen = new Bitmap(150, 150);

    Graphics graphics = Graphics.FromImage(printscreen as Image);

    graphics.CopyFromScreen(Point1, Point2, 0, 0, printscreen.Size);
    printscreen.Save(PATH_FILENAME, ImageFormat.Jpeg);

keylogger project上工作正常

答案 1 :(得分:1)

我把所有东西都放进了函数中。

/// <summary>
/// Takes a screenshot of the specified section of the screen.
/// </summary>
public void Screenshot(string filename, ImageFormat imageFormat, int width, int height, int sourceX, int sourceY, int destX, int destY)
{
    using (var bm = new Bitmap(width, height))
    {
        using (var gr = Graphics.FromImage(bm))
        {
            gr.CopyFromScreen(sourceX, sourceY, destX, destY, bm.Size);
            bm.Save(filename, imageFormat);
        }
    }
}

一个示例,从屏幕的左上角开始拍摄500x500的屏幕截图:

Screenshot(@"c:\temp\test.jpg", ImageFormat.Jpeg, 500, 500, 0, 0, 0, 0);

它可能需要在c#类的顶部进行以下导入:

using System.Drawing;
using System.Drawing.Imaging;

代码中的图形对象为空,因为它从未被初始化。 “ var gr = Graphics.FromImage(bm);”在我的示例中,line是对其进行初始化的东西(提供了要写入的位图)。

我将Bitmap和Graphics对象与“ using”语句一起使用,因为完成后需要在它们上调用Dispose方法(即使有例外,using语句也会自动执行)。 / p>