Создание скриншота области экрана

Написал  пример создания снимка области экрана, не используя класс Graphics и структуру Rectangle, как сделано в FastScreen.

Нам потребуется всего лишь один PictureBox.

Правда есть небольшой нюанс, при выделении области в левую строну экрана, край PB дергается.

На всякий случай, если у кого то получилось это исправить, напишите мне, я обязательно внесу изменения в статью.

Imports System.Drawing.Imaging
Public Class Form1
    Public Sub New()
        InitializeComponent()
        Me.Left = 0
        Me.Top = 0
        Me.Width = Screen.PrimaryScreen.Bounds.Width
        Me.Height = Screen.PrimaryScreen.Bounds.Height
        Me.BackColor = Color.Black
        Me.TransparencyKey = Color.Yellow
        Me.Opacity = 0.7
        Me.TopMost = True
        Me.Cursor = Cursors.Cross
        PictureBox1.BackColor = Color.Yellow
    End Sub
    Dim xy1 As Point, xy2 As Point
    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
        xy1 = e.Location
    End Sub
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        If e.Button = Windows.Forms.MouseButtons.Left Then
            xy2 = e.Location
            PictureBox1.Location = New Point(Math.Min(xy1.X, xy2.X), Math.Min(xy1.Y, xy2.Y))
            PictureBox1.Size = New Size(Math.Max(xy1.X, xy2.X) - PictureBox1.Location.X, Math.Max(xy1.Y, xy2.Y) - PictureBox1.Location.Y)
        End If
    End Sub
    Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
        Dim bmp As New Bitmap(PictureBox1.Width, PictureBox1.Height)
        Dim g As Graphics = Graphics.FromImage(bmp)
        g.CopyFromScreen(New Point(PictureBox1.Left, PictureBox1.Top), New Point(0, 0), New Point(PictureBox1.Width, PictureBox1.Height))
        bmp.Save(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\1.jpg", ImageFormat.Jpeg)
        MsgBox("Снимок создан") : PictureBox1.Size = New Size(0, 0)
    End Sub
End Class

Скачать исходник

  Метки: ,
  Евгений
  Просмотров: 9 929
  Запись опубликована в 11:31

6 комментариев

  • Разве "небольшой" пишется раздельно;)

  • Me.Opacity = 0.01
    g.CopyFromScreen(New Point(PictureBox1.Left, PictureBox1.Top), New Point(0, 0), New Point(PictureBox1.Width, PictureBox1.Height))
    Me.Opacity = 0.7 :wink:

  • Me.Opacity = 0.01
    g.CopyFromScreen(New Point(PictureBox1.Left, PictureBox1.Top), New Point(0, 0), New Point(PictureBox1.Width, PictureBox1.Height))
    Me.Opacity = 0.7

  • А как в FastScreen'е?

  • "На всякий случай, если у кого то получилось это исправить, напишите мне, я обязательно внесу изменения в статью"

    Да пожалуйста, вставить в класс формы

    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
    Get
    Dim cp As CreateParams = MyBase.CreateParams
    cp.ExStyle = cp.ExStyle Or &H2000000
    Return cp
    End Get
    End Property

Есть что сказать? Тогда действуй!