public string Screenshot(string dir, int width, int height)
{
int screenW, screenH;
GetScreenSize(out screenW, out screenH);
Bitmap memImage = new Bitmap(screenW, screenH);
using (Graphics g = Graphics.FromImage(memImage))
{
g.CopyFromScreen(0, 0, 0, 0, memImage.Size);
if (width > 0 && height > 0)
{
Bitmap newImage = new Bitmap(width, height);
using (Graphics g2 = Graphics.FromImage(newImage))
{
g2.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
g2.DrawImage(memImage, new Rectangle(0, 0, width, height));
memImage.Dispose();
memImage = newImage;
}
}
// create the directory if it doesn't exist - mostly for debugging
if (!System.IO.Directory.Exists(dir))
{
System.IO.Directory.CreateDirectory(dir);
}
string tempFile = System.IO.Path.GetTempFileName();
memImage.Save(tempFile, ImageFormat.Jpeg);
memImage.Dispose();
for (int i = 0; i < 10; i++)
{
try
{
String savedFile = "";
savedFile = dir + System.IO.Path.DirectorySeparatorChar + "screen" + i + ".jpg";
if (System.IO.File.Exists(savedFile))
{
System.IO.File.Replace(tempFile, savedFile, null);
}
else
{
System.IO.File.Move(tempFile, savedFile);
}
return dir + System.IO.Path.DirectorySeparatorChar + Environment.NewLine + "screen" + i + ".jpg";
}
catch (Exception e)
{
Console.Error.WriteLine("Failed to capture screenshot at iteration {0}: {1}", i, e);
}
}
}
return "FAILED" + Environment.NewLine + "FAILED";
}