Написал пример создания снимка области экрана, не используя класс 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
Скачать исходник