从一个主动覆盖的文件加载图像

时间:2018-12-09 20:54:43

标签: c# wpf forms file screenshot

我正在尝试创建一个应用程序,使我可以处理捕获的屏幕副本。我决定使用一个临时文件作为进一步的版本。

现在,我的代码创建了主屏幕的屏幕截图,并将其保存在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");
    }

0 个答案:

没有答案