Screenshot bereich auswählen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von TG22997.

    Screenshot bereich auswählen

    Guten Tag,

    ich möchte ein Screen Maker machen. Genauso wie das Snipping Tool von Win 7 ich wähle den Bereich aus den ich möchte (Linksklick gedrückt und Maus bewegen)
    und dieser Bereich soll "Fotografiert" werden also ein Screnn machen bei den ich den Bereich ausgewählt habe..

    leider kenn ich mich da nicht so aus deswegen frage ich ja ^^

    hoffe ihr könnt mir helfen
    Lege ein durchsichtiges Fenster über den ganzen Screen, in diesem funktioniert dann auch Deine Maus-Zieherei.
    Mit diesen Koordinaten befüllst Du die CopyFromScreen()-Funktion

    VB.NET-Quellcode

    1. Function Screenshot() As Bitmap
    2. Dim x0, y0, x1, y1 As Integer ' diese Werte musst Du vorgenen.
    3. Dim w, h As Integer ' die hier auch.
    4. Dim b As New Bitmap(w, h)
    5. Dim g As Graphics = Graphics.FromImage(b)
    6. g.CopyFromScreen(x0, y0, x1, y1, New Size(w, h))
    7. g.Dispose()
    8. Return b
    9. End Function
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Lege ein durchsichtiges Fenster über den ganzen Screen, in diesem funktioniert dann auch Deine Maus-Zieherei.
    Mit diesen Koordinaten befüllst Du die CopyFromScreen()-Funktion

    VB.NET-Quellcode

    1. Function Screenshot() As Bitmap
    2. Dim x0, y0, x1, y1 As Integer ' diese Werte musst Du vorgenen.
    3. Dim w, h As Integer ' die hier auch.
    4. Dim b As New Bitmap(w, h)
    5. Dim g As Graphics = Graphics.FromImage(b)
    6. g.CopyFromScreen(x0, y0, x1, y1, New Size(w, h))
    7. g.Dispose()
    8. Return b
    9. End Function
    Ok danke aber wie mach ich dieses "Rumgeziehe"?
    Du brauchst eine Form(Das ist so ein Fenster, üblich in systemen wie zum bleistift WINDOWS), mit dem FormBorderStyle
    "None". Über eine Einstellung namens "Opacity" deren Skala wie bei Pro(zent) = pro hundert aufgebaut ist. Nun weißt du sogar schon
    das Opacity mit dem Fachjargon-Wort Transparenz was aus dem Lateinischen kommt, zu vergleichen ist und von 1 bis 100 funktioniert =) Ist
    das nicht toll? Nein ehrlich jetzt -.- Du bekommst nen ganzen code C&P Code um genau zu sein achja das ist übrigens ein Akronym was für Copy
    and Paste bzw. Kopieren und Einfügen steht... Noch mehr Fachjargon =)... und du frägst wieder nach dem gleichen...
    Ist ein bisschen Eigeninitiative nicht zu viel verlangt!? Wenn man nicht mal erkennt für was ein Code ist
    den man schon fast komplett ausgereift geschickt bekommt... Weiß ich auch nicht...

    P.S.:

    TheFlash schrieb:


    VB.NET-Quellcode

    1. Function Screenshot() As Bitmap
    2. Dim x0, y0, x1, y1 As Integer ' diese Werte musst Du vorgenen.
    3. Dim w, h As Integer ' die hier auch.
    4. Dim b As New Bitmap(w, h)
    5. Dim g As Graphics = Graphics.FromImage(b)
    6. g.CopyFromScreen(x0, y0, x1, y1, New Size(w, h))
    7. g.Dispose()
    8. Return b
    9. End Function


    das ist der Code den du brauchst um das Bild zu machen! :thumbsup:
    Nun musst du dir überlegen wie du ein rechteckigne Kasten übern Bildschirm ziehen kannst, da kommt einem doch die Idee eine Windows Form, die kann amn Verschieben und die Größe verändern. Mittels Location und Size kannst dann alles abfragen und den Screenshot machen. Macht doch sinn oder?

    TheFlash schrieb:

    RodFromGermany schrieb:

    Lege ein durchsichtiges Fenster über den ganzen Screen, in diesem funktioniert dann auch Deine Maus-Zieherei.
    Mit diesen Koordinaten befüllst Du die CopyFromScreen()-Funktion

    VB.NET-Quellcode

    1. Function Screenshot() As Bitmap
    2. Dim x0, y0, x1, y1 As Integer ' diese Werte musst Du vorgenen.
    3. Dim w, h As Integer ' die hier auch.
    4. Dim b As New Bitmap(w, h)
    5. Dim g As Graphics = Graphics.FromImage(b)
    6. g.CopyFromScreen(x0, y0, x1, y1, New Size(w, h))
    7. g.Dispose()
    8. Return b
    9. End Function
    Ok danke aber wie mach ich dieses "Rumgeziehe"?

    TheFlash schrieb:

    Ja gut aber das ist ja nur die Funktion.. ich weis blos nicht was ich jetzt machen soll ..

    Die Unterhose über den Kopf ziehen =)
    Ne Spaß... Du hast jetzt schon eine Funktion mit der du das Bild machen kannst. Nun
    brauchst du eine weiter Funktion(nicht unbedingt vom typ funktion, kann auch eine sub sein)
    die dir das ziehen von einem kasten ermöglicht wie z.b. in paint nur das dabei eine start und eine end location entsteht,
    sodass du zwei punkte hast um ein rechteck zu erstellen:

    VB.NET-Quellcode

    1. Function Screenshot(ByVal x0, y0, x1, y1 As Integer, ByVal w, h As Integer) As Bitmap
    2. Dim b As New Bitmap(w, h)
    3. Dim g As Graphics = Graphics.FromImage(b)
    4. g.CopyFromScreen(x0, y0, x1, y1, New Size(w, h))
    5. g.Dispose()
    6. Return b
    7. End Function


    War lediglich noch mal eine Verbesserung des Codes von RodFromGermany

    mfg
    Also:
    Eine Form kann auf verschiedene Events reagieren, z.b. wenn du darauf klickst. Dann löst es eine Sub, kann
    man auch Funktion nennen. Diese fängt den Mausklick ab und schaltet die Sub ein in der du Code
    hineinschreiben kannst. Die sieht so aus:

    VB.NET-Quellcode

    1. Private Sub Form1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
    2. e.Location.X 'x0
    3. e.Location.Y 'y0
    4. End Sub

    nun hättest du schon den anfangs punkt.
    währenddessen ziehst du aber ja den kasten und lässt irgendwann noch die maus los:

    VB.NET-Quellcode

    1. Private Sub Form1_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
    2. e.Location.X 'x1
    3. e.Location.Y 'y1
    4. End Sub


    Und nun kannst du über eine Funktion mit der du auf die Form zeichnen kannst:

    VB.NET-Quellcode

    1. Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    2. Dim g As Graphics
    3. Dim t As New Drawing.Rectangle
    4. t.X = 0 'x0
    5. t.Y = 0 'y0
    6. t.Width = 200 'x1-x0
    7. t.Height = 200 'y1-y0
    8. g.DrawRectangle(Pens.Black, t)
    9. e.Graphics.DrawRectangle(Pens.Black, t)
    10. End Sub


    So ähnlich hier benutzt man das paint event der form ;D
    Das ist nicht falsch, es ist nicht komplett. Er hat sinnvoll hingeschrieben was du machen musst (variablen namens "x0", "x1", "y0" und "y1" benutzen usw).
    Stell' dich nicht so an und mach auch mal was selber.
    Von meinem iPhone gesendet
    Das Problem ist das ich dir jetzt und ich denke nikee und der rest auch ein kompletten code wie du ein fenster machst in
    dem du ein rechteck zeichnest mit der maustaste dessen rahmung die ecken eines screenshots bildet. Nur ist das halt für
    einen Anfänger wie dich jetzt nicht leicht den ganzen Code ins Kurzzeitgedächtnis reinzupressen weil das Kurzzeitgedächtnis
    eh nur ungefähr 10s hält und 6-8 speicherplätze frei hat. =)
    Ich könnt jetzt mit:

    VB.NET-Quellcode

    1. Dim nForm As New Form
    2. nForm.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    3. nForm.WindowState = FormWindowState.Maximized
    4. AddHandler nForm.MouseDown, AddressOf nForm_MouseDown
    5. AddHandler nForm.MouseUp, AddressOf nForm_MouseUp
    6. End Sub
    7. Sub nForm_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
    8. 'Code
    9. End Sub
    10. Sub nForm_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
    11. 'Code
    12. End Sub


    Und so anfangen aber erstensmal ist mir meine Zeit zu viel Wert, als mich hinzusetzen und dumm zu schreiben, außerdem
    musst du mit was leichterem anfangen ...

    Code kann fehler beeinhalten war nur ausm kopf raus

    mfg