65.9K
CodeProject 正在变化。 阅读更多。
Home

屏幕截图

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.82/5 (9投票s)

2012 年 8 月 4 日

CPOL

3分钟阅读

viewsIcon

55498

downloadIcon

7176

在浏览、使用任何软件时捕获屏幕的一部分,并自动保存

引言

使用此软件,您可以捕获屏幕的部分内容并自动保存它们,或将它们复制到剪贴板以在其他软件中使用。这对我特别有用,因为我不希望将每个网页都存储为 HTML 及其大量图像。只需整个页面的一部分...

而且我们也可以制作我们软件的截图。

背景

总的来说,我们都在网上冲浪,以了解新技术或是一些编码技巧或一些项目。有时,我们觉得我们只需要屏幕的一部分即可。我们试图保存整个页面,而我们只想保存一部分。然后我们捕获整个屏幕并将其粘贴到照片编辑软件中,裁剪它,然后保存。这需要花费太多时间。所以我考虑搜索一个用于此目的的软件。我在 Windows 7 中找到了一个,但它也需要很多时间,我们必须打开它,然后捕获,然后保存。所以我自己制作了一个,我只需双击托盘图标,选择我想要的部分,软件就会自动将其保存到提供的文件夹中。我也可以给它一个标题。

Using the Code

它非常容易使用。

只需打开软件,托盘中就会有一个通知图标。只需双击它。

您需要选择要捕获的区域... 完成了! 截图将被保存到提供的目录中。 它的通用目录是我的图片

现在让我们谈谈我使用的代码。

首先,让我们看看我用来捕获屏幕的代码。

    Sub CaptureScreen()
        Dim hgt As Integer = My.Computer.Screen.WorkingArea.Height
        Dim wdh As Integer = My.Computer.Screen.WorkingArea.Width
        Dim scrn As New Bitmap(wdh, hgt, Imaging.PixelFormat.Format64bppArgb)
        Dim gp As Graphics = Graphics.FromImage(scrn)
        gp.CopyFromScreen(0, 0, 0, 0, New Size(wdh, hgt))
        frmCapture.BackgroundImage = scrn
        ScreenImg = scrn
        frmCapture.lblFill.BackColor = Color.FromArgb(150, Color.Silver)
        frmCapture.lblFill.Visible = False
        frmCapture.Location = New Point(0, 0)
        frmCapture.Size = New Size(wdh, hgt)
        'scrn.Save("D:\a.bmp", Imaging.ImageFormat.Bmp)
    End Sub

当我们双击 NotifyIcon 时,它会调用 CaptureScreen 函数。

CaptureScreen 函数定义一个图形来处理图像编辑,首先使用命令 gp.CopyFromScreen(0, 0, 0, 0, New Size(wdh,hgt) 从屏幕复制图像。

这里,wdhhgt 是屏幕的宽度和高度。

然后,它将其显示为 frmCapture 中的背景图像。 最后,frmCapture 将向我们显示。

在其中,我们必须选择要捕获的区域,该区域使用以下命令来突出显示选择区域。

    Private Sub frmCapture_MouseMove(ByVal sender As Object, ByVal e As _
                                  System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        Dim hgt As Integer = My.Computer.Screen.WorkingArea.Width
        Dim wdh As Integer = My.Computer.Screen.WorkingArea.Width
        If e.Button = Windows.Forms.MouseButtons.Left Then
            lblFill.Visible = True
            lblFill.Left = IIf(StPosX > e.X, e.X, StPosX)
            lblFill.Top = IIf(StPosY > e.Y, e.Y, StPosY)
            lblFill.Width = Math.Abs(StPosX - e.X)
            lblFill.Height = Math.Abs(StPosY - e.Y)
        End If
    End Sub

对于选择区域,我使用了透明标签。 当我们拖动鼠标时,会向我们显示标签,以供参考,以显示选择区域。

然后,当我们完成选择后,将执行以下事件

    Private Sub frmCapture_MouseUp(ByVal sender As Object, ByVal e As _
                      System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
        If StPosX <> e.X And StPosY <> e.Y Then
            EnPosX = e.X
            EnPosY = e.Y

            Dim CrpImg As Bitmap
            Dim gp As Graphics
            Me.Close()

            If My.Settings.Title = True Then
                CrpImg = New Bitmap(Math.Abs(StPosX - EnPosX), _
                      Math.Abs(StPosY - EnPosY) + 20, Imaging.PixelFormat.Format64bppArgb)
                gp = Graphics.FromImage(CrpImg)
                gp.DrawImage(ScreenImg, -IIf(StPosX > EnPosX, _
                EnPosX, StPosX), -IIf(StPosY > EnPosY, EnPosY, StPosY) + 20)
                Dim titl As String = InputBox("Enter Title to this Image...", _
                                     "Title", "My Image")
                gp.FillRectangle(Brushes.White, 0, 0, Math.Abs(StPosX - EnPosX), 20)
                gp.DrawString(titl, My.Settings.TitleFont, Brushes.Black, 10, 3)
            Else
                CrpImg = New Bitmap(Math.Abs(StPosX - EnPosX), Math.Abs(StPosY - EnPosY))
                gp = Graphics.FromImage(CrpImg)
                gp.DrawImage(ScreenImg, -IIf(StPosX > EnPosX, EnPosX, StPosX), _
                                        -IIf(StPosY > EnPosY, EnPosY, StPosY))
            End If

            Dim num As String = vbNull
            If My.Settings.SaveFile Then
                Dim FileList As Collections.ObjectModel.ReadOnlyCollection(Of String)
                FileList = My.Computer.FileSystem.GetFiles(My.Settings.FilePath & "\", _
            FileIO.SearchOption.SearchAllSubDirectories, My.Settings.FileName & "*.bmp")
                Dim MaxFile As Integer

                If FileList.Count <> 0 Then
                    MaxFile = CInt(Microsoft.VisualBasic.Right( _
                       FileList.Item(FileList.Count - 1).ToString(), 7).Replace(".bmp", ""))
                Else
                    MaxFile = 0
                End If
                num = MaxFile + 1
                For i As Integer = 1 To 3 - num.Length
                    num = "0" & num
                Next
                CrpImg.Save(My.Settings.FilePath & "\" & My.Settings.FileName & " - " & _
                                             num & ".bmp", Imaging.ImageFormat.Bmp)
                frmDetails.NotifyIcon1.ShowBalloonTip(100, "Saved", _
                "Your Screen Capture has been saved.", ToolTipIcon.Info)
            Else
                Clipboard.SetImage(CrpImg)
                frmDetails.NotifyIcon1.ShowBalloonTip(100, "Saved", _
                         "Your Screen Capture has been copied to Clipboard.", ToolTipIcon.Info)
            End If
            Call frmDetails.ShowThumb(CrpImg, IIf(My.Settings.SaveFile, _
            My.Settings.FileName & " - " & num, "Clipboard"))
        End If
    End Sub

在这里,首先,我检查用户选择的区域是否大于零。然后创建一个新的图形,它从 frmCapture 背景图像导入图像,并根据用户的设置直接保存或复制到剪贴板。

如果用户设置是要给图像一个标题,则它将要求输入图像的标题。

标题已提供给图像。 参见下图,“Code Project Home” 是标题。

然后,完成了最后一件事。我们有一个查看已捕获的图像并显示已捕获的总图像数量的功能。为此,我们使用一个命令来创建缩略图并将其显示在 listview 中。

    Public Sub ShowThumb(ByVal Img As Image, ByVal FileName As String)
        Dim thumb As New Bitmap(thumbW, thumbW)
        Dim gp As Graphics = Graphics.FromImage(thumb)
        gp.DrawImage(Img, New Rectangle(0, 0, IIf(Img.Width > Img.Height, _
        thumbW, thumbW * Img.Width / Img.Height), IIf(Img.Width > Img.Height, _
        thumbW * Img.Height / Img.Width, thumbW)))
        ImageList1.Images.Add(thumb)
        ListView1.Items.Add(FileName, CInt(lblCount.Text))
        lblCount.Text = CInt(lblCount.Text) + 1
    End Sub

缩略图与文件名一起显示。

如上图所示。

我们可以从 选项 对话框中编辑要提供给图像的文件名和其他设置。

更改默认标题及其字体。

关注点

此代码对于那些主要初学者并且想用图像获得一些乐趣的人特别有用。他们可以了解如何使用 Bitmap 函数创建位图,并将其保存为不同的格式,例如 .bmp, .jpg, .png 等,并创建图像的缩略图,并在 listview 中显示它。

而任何每天都习惯于浏览内容并将其存储为带有标题的图像的人都会有很多乐趣...

历史

  • 2012 年 8 月 4 日:版本 1.0.0.0 - 首次发布
© . All rights reserved.