Teil Screenshot erstellen und aus der Zwischenablage speichern

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von SpaceyX.

    Teil Screenshot erstellen und aus der Zwischenablage speichern

    HI Leute
    Ich habe eine Picturebox mit einem Label darauf. Jetzt möchte ich einen Screenshot erstellen , aber nur dort wo die Picturebox ist, egal wo oder wie gross sie ist. Danach möchte ich das Bild aus der Zwischenablage als JPG-Datei speichern (der Pfad ist in einer Textbox angegeben). Wie mache ich das? ?(
    Hallo,

    du könntest dir ja die x,y position der Picturebox auslesen dann hast du deinen Anfangspunkt.
    Dann könntest du die breite und höhe der jeweiligen Koordinate hinzurechnen und du hast deinen Endpunkt.
    Somit müsstest du von einem Gesamtscreenshot das Rechteck das du von den beiden Punkten zeichnen kannst abziehen können.
    Edit:
    Sollte dann ja so gehen:

    VB.NET-Quellcode

    1. g.CopyFromScreen(Anfangspunkt,Endpunkt)
    Klicke auf CopyFromScreen() und drück auf F1. Hilfe. Es öffnet sich die MSDN (Microsoft-Hilfe) und Du kannst Dich über jeden einzelnen Parameter informieren und Dir auch ein Beispiel ansehen.
    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!
    Du musst g. nicht ersetzen sondern als Graphics deklarieren.

    Ich gebe dir mal ein Beispiel wie man einen Desktop-Screenshot macht und diesen
    speichert. Mit etwas mühe wirst du das für dein vorhaben anpassen können.

    VB.NET-Quellcode

    1. Dim g As Graphics
    2. Dim img As Bitmap = New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
    3. g = Graphics.FromImage(img)
    4. g.CopyFromScreen(0, 0, 0, 0, img.Size)
    5. img.Save("c:\1.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)

    bigcompfan schrieb:

    Durch was muss ich das g. ersetzen?
    Da haste iwo einen C&P-Code her gegriffen und hast die Posts darum nicht gelesen.
    Nun hast keinen Kontext, wo das Zeugs hingehört oder wo es herkommt und schreibst merkwürdige Posts an das (Haupt-)Forum. X(
    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!
    ok soviel hab ich schon geschaft:

    VB.NET-Quellcode

    1. Label4.Text = TextBox2.Text + "\" + Label3.Text + ".jpg"
    2. Dim g As Graphics
    3. Dim img As Bitmap = New Bitmap(PictureBox1.Width, PictureBox1.Height)
    4. g = Graphics.FromImage(img)
    5. g.CopyFromScreen(0, 0, 0, 0, img.Size)
    6. img.Save((Label4.Text), System.Drawing.Imaging.ImageFormat.Jpeg)


    ich weiss, dass ich 0,0,0,0 durch etwas ersetzen muss. Die vier Nullen zeigen an wo er anfängt zu kopieren, richtig?
    Lies Deine Posts.

    RodFromGermany schrieb:

    Klicke auf CopyFromScreen() und drück auf F1. Hilfe. Es öffnet sich die MSDN (Microsoft-Hilfe) und Du kannst Dich über jeden einzelnen Parameter informieren und Dir auch ein Beispiel ansehen.
    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!
    "g.CopyFromScreen(0, 0, 0, 0, img.Size)"

    Die erste 0 steht für die startposition des snapshots auf der x-achse,
    die zweite steht für die startposition des snapshots auf der y-achse,
    die dritte steht für die position in der Bitpmap auf der x-achse wo der
    snapshot in die Bitmap eingefügt wird, die vierte steht für,
    wie die dritte auch nur halt für die y-achse.

    mfG

    Derfuhr

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Derfuhr“ ()

    Bei mir kommt nur: Keine Schlüsselwörter gefunden! deshalb frage ich ja. :)
    Also bei picturebox1.location habe ich die ersten zwei nullen?
    EDIT:
    also folgenden Code habe ich jetzt:

    VB.NET-Quellcode

    1. Label4.Text = TextBox2.Text + "\" + Label3.Text + ".jpg"
    2. Dim g As Graphics
    3. Dim img As Bitmap = New Bitmap(PictureBox1.Width, PictureBox1.Height)
    4. g = Graphics.FromImage(img)
    5. g.CopyFromScreen(PictureBox1.Location.X, PictureBox1.Location.Y, 0, 0, img.Size)
    6. img.Save((Label4.Text), System.Drawing.Imaging.ImageFormat.Jpeg)

    Nun muss ich doch die 2 Nullen durch etwas ersetzen?

    bigcompfan schrieb:

    Keine Schlüsselwörter gefunden!
    Da haste was falsch gemacht, dies sollte kommen:

    Und das Bedienen der MSDN gehört zu den Basics, im Hauptforum posten zu dürfen.
    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!

    bigcompfan schrieb:

    Klicken und F1 oder?
    Wo kriege ich die Position her?
    :rolleyes:
    Bewege die Maus so, dass sie sich auf dem Wort CopyFromScreen befindet, dann klickst Du die linke Maustaste.
    Danach drückst Du die F1-Taste der Tastatur, die mit genau diesem Rechner verbunden ist.
    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!
    Du nimmst die Position.X deiner Form + Position.X deiner PictureBox +((Form.Width - Form.ClientRectangle.Width) / 2) dann hasst du die x Position mit y musst du ähnlich verfahren, nur mit heigth anstatt width.

    "((Form.Width - Form.ClientRectangle.Width) / 2)" ist um den linken rahmen der Form mit einzubeziehen.

    bedenke aber das beim ermitteln der y position nicht mit (Form.Height - Form.ClientRectangle.Height) / 2) gearbeitet
    werden kann weil die Titelleiste.Height <> Rahmenunten.Height ist. Ab hier musst du nun Probieren.

    mfG

    Derfuhr

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Derfuhr“ ()