2014-03-27 2 views
2

У меня есть 2 формы.Сохранить форму как изображение (снимок экрана)

  • форма 1 содержит контент, который мне нужен скриншот
  • Форма 2 содержит графический рисунок (эта форма всегда на высоте, но прозрачный).

мне нужно снимок экрана первой формы, не делая его на верхней части формы 2, а также без учета содержания от формы 2.

здесь некоторые, что я работаю с, что я пытаюсь исправить.

Private Function TakeScreenShot(ByVal Control As Control) As Bitmap 
    Dim Screenshot As New Bitmap(Control.Width, Control.Height) 
    Control.DrawToBitmap(Screenshot, New Rectangle(0, 0, Control.Width, Control.Height)) 
    Return Screenshot 
End Function 

Эта функция не работает, потому что Control.drawtoBitmap не устанавливает значение IMG.

IMG пуст и возвращается как простое белое изображение.

Вызывающий этой функции это

TakeScreenShot(form1.webbrowser1).Save("c:\Screenshot.png", 
    System.Drawing.Imaging.ImageFormat.Png) 

Вся помощь будет оценена.

ответ

10

Заменить TakeScreenShot функцию с этим:

Private Function TakeScreenShot(ByVal Control As Control) As Bitmap 
    Dim tmpImg As New Bitmap(Control.Width, Control.Height) 
    Using g As Graphics = Graphics.FromImage(tmpImg) 
     g.CopyFromScreen(Control.PointToScreen(New Point(0, 0)), New Point(0, 0), New Size(Control.Width, Control.Height)) 
    End Using 
    Return tmpImg 
End Function 

Это должно работать, однако, если по каким-то причинам это не проблема может быть прозрачной формы сверху.

Вы можете назвать это точно так же.

Удача :)

+0

Это работает! Вы решили мою проблему! – beppe9000

+0

Если вы хотите захватить не только клиентскую часть окна yout, но и все окно, просто измените инструкцию g.CopyFormScreen таким образом -> g.CopyFromScreen (Control.Location.X, Control.Location.Y, 0, 0, Control.Size, CopyPixelOperation.SourceCopy) – Fil

Смежные вопросы