-1

我可以将屏幕截图保存在计时器上,但是如何将其保存为新名称而不是每次都覆盖?

Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
                           Screen.PrimaryScreen.Bounds.Height);

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

graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size);

bitmap.Save(@"c:tempscreenshot.bmp", ImageFormat.Bmp);
4

5 回答 5

5

您可以使用方便的方法:Path.GetRandomFileName()

Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, 
              Screen.PrimaryScreen.Bounds.Height);

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

  graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size);

bitmap.Save("c://" + Path.GetRandomFileName() + ".bmp", ImageFormat.Bmp);
于 2013-04-21T22:37:45.683 回答
3

您只需要每次生成一个唯一的名称。有几种可能性。一种是在末尾添加一个日期时间字符串:

Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, 
              Screen.PrimaryScreen.Bounds.Height);

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

  graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size);

bitmap.Save(@"c:tempscreenshot" + DateTime.Now.Ticks + ".bmp", ImageFormat.Bmp);
于 2013-04-21T22:36:31.333 回答
3

使用整数(或其他数字类型)并在计时器内递增。然后用类似的方法调用你的保存方法:

bitmap.Save(string.Format("c:tempscreenshot.{0}.bmp", counter), ImageFormat.Bmp);

或使用 GUID:

bitmap.Save(string.Format("c:tempscreenshot.{0}.bmp", Guid.NewGuid().ToString("N")), ImageFormat.Bmp);
于 2013-04-21T22:36:55.580 回答
1

您可以根据当前时间每次生成一个新的文件名。像这样的东西:

string GenerateFilename() {
    string file = DateTime.Now.ToString("yy.MM.dd HH.mm.ss") + ".bmp";
    return @"C:\" + file;
}

使用这种方法的好处是,当您浏览保存文件的文件夹时,它们将被排序。

然后在您现有的代码中使用它:

bitmap.Save(GenerateFilename(), ImageFormat.Bmp);

您还可以image-在文件名前添加任何文本(例如或其他内容)。

另一种选择是在文件名的末尾附加一个整数,就像一些复制处理程序一样。

于 2013-04-21T22:38:01.340 回答
1

已经有一些东西了: Path.GetTempFileName()

于 2013-04-21T22:39:09.903 回答