none
Автоматические создание скриншота WPF RRS feed

  • Вопрос

  • Можно ли как то сделать скриншот определенной области в форме программы, и сохранить его с размерами 300х250?

    Например слева в окне программы что-то создается, рисуется или перетаскивается, а при нажатии справа на кнопку, левый участок, со всеми данными (кнопками, текстами) сохраняется в изображение нужного размера... Реально такое сделать? 

    26 июля 2012 г. 13:47

Ответы

  •     var bmp = new WriteableBitmap(element, null);

       
    var ms = new MemoryStream();
        bmp
    .SaveJpeg(
            ms
    ,
           
    (int)element.ActualWidth,
           
    (int)element.ActualHeight,
           
    0,
           
    100);
        ms
    .Seek(0, SeekOrigin.Begin);
    • Помечено в качестве ответа Siompc 26 июля 2012 г. 15:22
    26 июля 2012 г. 14:19
    Отвечающий
  • SaveJpeg не является членом WriteableBitmap

     Dim scrWidth As Integer = Screen.PrimaryScreen.Bounds.Width ' ширина экрана 
            Dim scrHeight As Integer = Screen.PrimaryScreen.Bounds.Height ' высота экрана 
            Dim bitmap As New Bitmap(850, 500)
            Dim screenshot As Graphics = Graphics.FromImage(bitmap)
            screenshot.CopyFromScreen(Me.Left, Me.Top, 0, 0, New Size(scrWidth, scrHeight)) '(size -Размер передаваемой области) 
            bitmap.Save("screen1.jpg", Imaging.ImageFormat.Jpeg)

    Кажется нашел такой вариант :)

    • Помечено в качестве ответа Siompc 26 июля 2012 г. 15:23
    26 июля 2012 г. 14:52

Все ответы

  •     var bmp = new WriteableBitmap(element, null);

       
    var ms = new MemoryStream();
        bmp
    .SaveJpeg(
            ms
    ,
           
    (int)element.ActualWidth,
           
    (int)element.ActualHeight,
           
    0,
           
    100);
        ms
    .Seek(0, SeekOrigin.Begin);
    • Помечено в качестве ответа Siompc 26 июля 2012 г. 15:22
    26 июля 2012 г. 14:19
    Отвечающий
  • SaveJpeg не является членом WriteableBitmap

     Dim scrWidth As Integer = Screen.PrimaryScreen.Bounds.Width ' ширина экрана 
            Dim scrHeight As Integer = Screen.PrimaryScreen.Bounds.Height ' высота экрана 
            Dim bitmap As New Bitmap(850, 500)
            Dim screenshot As Graphics = Graphics.FromImage(bitmap)
            screenshot.CopyFromScreen(Me.Left, Me.Top, 0, 0, New Size(scrWidth, scrHeight)) '(size -Размер передаваемой области) 
            bitmap.Save("screen1.jpg", Imaging.ImageFormat.Jpeg)

    Кажется нашел такой вариант :)

    • Помечено в качестве ответа Siompc 26 июля 2012 г. 15:23
    26 июля 2012 г. 14:52
  • SaveJpeg не является членом WriteableBitmap

     Dim scrWidth As Integer = Screen.PrimaryScreen.Bounds.Width ' ширина экрана 
            Dim scrHeight As Integer = Screen.PrimaryScreen.Bounds.Height ' высота экрана 
            Dim bitmap As New Bitmap(850, 500)
            Dim screenshot As Graphics = Graphics.FromImage(bitmap)
            screenshot.CopyFromScreen(Me.Left, Me.Top, 0, 0, New Size(scrWidth, scrHeight)) '(size -Размер передаваемой области) 
            bitmap.Save("screen1.jpg", Imaging.ImageFormat.Jpeg)

    Кажется нашел такой вариант :)

    А это вариант с подключением WinForms (GDI+) рисования?

    Посмотрите еще такой, может будет лучше работать:

    Dim hpx As Integer
    Dim wpx As Integer
    hpx = 300
    wpx = 250
    Dim rtb As New RenderTargetBitmap(InkCanvas.ActualWidth * (wpx / 96), InkCanvas.ActualHeight * (wpx / 96), wpx, hpx, PixelFormats.Pbgra32)
    rtb.Render(InkCanvas)
    
    Dim jpg As New JpegBitmapEncoder()
    jpg.Frames.Add(BitmapFrame.Create(rtb))
    Dim stm As IO.Stream = IO.File.Create("C:\new.jpg")
    Try
        jpg.Save(stm)
    Finally
        stm.Dispose()
    End Try

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    26 июля 2012 г. 14:54
    Отвечающий
  • Брал код из WP7 приложения... Хорошо, что нашли другой вариант :)
    26 июля 2012 г. 15:05
    Отвечающий