我正在尝试创建一个应用程序,使我可以处理捕获的屏幕副本。我决定使用一个临时文件作为进一步的版本。
现在,我的代码创建了主屏幕的屏幕截图,并将其保存在E:\驱动器上。然后打开一个新窗口-代码显示先前保存的文件并删除临时文件。最终,代码应在释放鼠标左键并返回到第一个窗口后关闭窗口。
我的问题是,无论尝试多少次,我只会显示第一张图片。这意味着第一次显示正确-我的代码正确显示了捕获的屏幕。然后,如果我尝试对桌面进行一些更改来重复该过程以发现差异,那么即使删除了第一个临时文件,程序仍会显示第一张图像。有趣的是,我可以在图像查看器中依次检查两个图像,而实际上它们是不同的。在下面,您可以从我的两个表单中看到代码。
表格1:
private void ScreenshotWindow_Click(object sender, RoutedEventArgs e)
{
Hide();
String zrzut = "test" + ".png";
int screenLeft = (int)SystemParameters.VirtualScreenLeft;
int screenTop = (int)SystemParameters.VirtualScreenTop;
int screenWidth = (int)SystemParameters.PrimaryScreenWidth;
int screenHeight = (int)SystemParameters.PrimaryScreenHeight;
Bitmap bitmap_Screen = new Bitmap(screenWidth, screenHeight);
Graphics g = Graphics.FromImage(bitmap_Screen);
g.CopyFromScreen(screenLeft, screenTop, 0, 0, bitmap_Screen.Size);
bitmap_Screen.Save("E:\\" + capture);
Screenshot screenCapture = new Screenshot();
Show();
screenCapture.Show();
}
表2:
public Screenshot()
{
InitializeComponent();
sp.Children.Clear();
Image i = new Image();
BitmapImage src = new BitmapImage();
src.BeginInit();
src.UriSource = new Uri("E:\\test.png", UriKind.Relative);
src.CacheOption = BitmapCacheOption.OnLoad;
src.EndInit();
i.Source = src;
i.Stretch = Stretch.Uniform;
sp.Children.Add(i);
System.IO.File.Delete("E:\\test.png");
}