Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0087: Gezielter Screenshot

 von 

Beschreibung

Ausgehend von Bildschirmfoto (Screenshot) erstellen [Tipp 60] wird hier eine kleine, aber praktische Anwendung zur Erstellung gezielter Screenshots vorgestellt. Der Bild-Ausschnitt wird über eine Form gewählt, dessen Clientbereich mittels TransparencyKey durchsichtig gemacht ist.Die Bildschirmausschnitte werden in einem frei wählbaren Format in einem Unterordner von "Eigene Bilder" abgelegt.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Framework-Version(en):

.NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5

.NET-Version(en):

Visual Basic 2005, Visual Basic 2008

Download:

Download des Beispielprojektes [13,45 KB]

' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' Projektversion:   Visual Studio 2005
' Option Strict:    An
'
' Referenzen: 
'  - System
'  - System.Data
'  - System.Drawing
'  - System.Windows.Forms
'  - System.Xml
'
' Imports: 
'  - Microsoft.VisualBasic
'  - Microsoft.VisualBasic.ControlChars
'  - System
'  - System.Collections
'  - System.Collections.Generic
'  - System.Data
'  - System.Drawing
'  - System.Diagnostics
'  - System.Windows.Forms
'

' ##############################################################################
' ################################ frmMain.vb ##################################
' ##############################################################################
Imports Microsoft.VisualBasic.ControlChars
Imports System.Drawing.Imaging
Imports System.io
Imports System.Collections.Generic
Imports System.Environment

Public Class frmMain
    Private _ShotDir As String
    Private _ShotFile As String = "ScreenShot"
    Private _ShotTemplate As String

    Private Sub frmMain_Load(ByVal sender As Object, _
        ByVal e As EventArgs) Handles MyBase.Load

        ' Alle möglichen ImageFormate in die Combobox eintragen
        Dim Formats As ImageFormat() = New ImageFormat() { _
           ImageFormat.Bmp, ImageFormat.Emf, ImageFormat.Exif, _
           ImageFormat.Gif, ImageFormat.Icon, ImageFormat.Jpeg, _
           ImageFormat.Png, ImageFormat.Tiff, ImageFormat.Wmf}
        Me.cmbSaveAs.ComboBox.DataSource = Formats
        ' Voreinstellung
        Me.cmbSaveAs.SelectedItem = ImageFormat.Png

        ' Gegebenenfalls Unterordner in "Eigene Bilder" anlegen
        _ShotDir = Path.Combine(GetFolderPath(SpecialFolder.MyPictures), _
            "ScreenShots")
        If Not Directory.Exists(_ShotDir) Then _
            Directory.CreateDirectory(_ShotDir)
        _ShotTemplate = Path.Combine(_ShotDir, _ShotFile)
    End Sub

    Private Sub btSave_Click(ByVal sender As Object, _
        ByVal e As EventArgs) Handles btSave.Click

        ' Klick-Feedback geben
        My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Asterisk)

        ' Erforderlichen Nummern-Anhang für die Datei herausfinden
        Dim SearchPattern As String = _
            String.Concat(_ShotFile, "??.", cmbSaveAs.SelectedItem)
        Dim Files As String() = Directory.GetFiles(_ShotDir, SearchPattern)
        Dim Numb As Integer = 0
        If Files.Length > 0 Then
            Array.Sort(Files)
            Numb = Integer.Parse(Files(Files.Length - 1).Substring( _
                _ShotTemplate.Length, 2)) + 1
        End If

        'Foto-Position bestimmen
        Dim Rct As Rectangle
        With Me.PhotoPanel
            ' Umrechnung auf Bildschirmkoordinaten
            Rct = .RectangleToScreen(.ClientRectangle)
        End With

        ' Knipsen und speichern
        Using Bmp As Bitmap = New Bitmap(Rct.Width, Rct.Height), _
                g As Graphics = Graphics.FromImage(Bmp)

            g.CopyFromScreen(Rct.Location, Point.Empty, Rct.Size)
            Dim Format As ImageFormat = DirectCast(cmbSaveAs.SelectedItem,  _
                ImageFormat)
            Bmp.Save(String.Concat(_ShotTemplate, Numb.ToString("00"), ".", _
                Format), Format)
        End Using
    End Sub

    Private Sub btOpenShotFolder_Click(ByVal sender As Object, _
        ByVal e As EventArgs) Handles btOpenShotFolder.Click

        ' "Eigene Bilder\ScreenShots" im Explorer öffnen
        Process.Start(_ShotDir)
    End Sub
End Class

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 1 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Bernd am 19.07.2009 um 17:54

Wiso ist das Panel nach dem Starten durchsichtig ?
wenn ich das Project Nachbaue ist es bei mir nicht transparent.

danke