Как сделать скриншот из эмулятора Microsoft Surface? - PullRequest
0 голосов
/ 18 января 2011

Чтобы написать руководство пользователя для моего приложения, мне нужно сделать несколько скриншотов из эмулятора Microsoft Surface.

Как я могу это сделать? Конечно, я мог бы просто сделать скриншот в моей ОС, а затем вырезать изображение в редакторе фотографий, но разве нет более простого способа?

1 Ответ

2 голосов
/ 09 марта 2011

Итак, наконец-то я нашел хороший способ сделать это:

class ScreenshotTaker
    {
        public static void TakeScreenshot(Visual target)
        {
            String fileName = "Screenshot-" + DateTime.UtcNow.ToString().Replace(" ", "-").Replace(".", "_").Replace(":", "_") + ".tiff";
            Console.WriteLine("Try to take screenshot: " + fileName);
            FileStream stream = new FileStream(fileName, FileMode.Create);
            TiffBitmapEncoder encoder = new TiffBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(GetScreenShot(target)));
            encoder.Save(stream);
            stream.Flush();
            stream.Close();
            Console.WriteLine("Screenshot taken");
        }

        private static BitmapSource GetScreenShot(Visual target)
        {
            Rect bounds = VisualTreeHelper.GetDescendantBounds(target);
            RenderTargetBitmap bitmap = new RenderTargetBitmap(1024, 768, 96, 96, PixelFormats.Pbgra32);

            DrawingVisual drawingvisual = new DrawingVisual();

            using (DrawingContext context = drawingvisual.RenderOpen())
            {
                context.DrawRectangle(new VisualBrush(target), null, new Rect(new Point(), bounds.Size));
                context.Close();
            }

            bitmap.Render(drawingvisual);
            return bitmap;
        }

    }
...