Schnelle Bilder erstellen/speichern[avilib]

  • VB.NET

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von Nsjdvv.

    Schnelle Bilder erstellen/speichern[avilib]

    Abend,

    Ich hab wieder n problem^^

    undzwar muss ich für ein videoprogramm screenshot´s schnell erstellen&speichern,kennt dazu jemand ein anderen weg als:

    VB.NET-Quellcode

    1. Dim currentScreenSize As Size = New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
    2. Dim ScreenToBitmap As New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
    3. Dim gGraphics As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(ScreenToBitmap)
    4. gGraphics.CopyFromScreen(New Point(0, 0), New Point(0, 0), currentScreenSize)
    5. ScreenToBitmap.Save(Application.StartupPath & "\pic\" & TimeOfDay.Minute & TimeOfDay.Second & TimeOfDay.Millisecond & ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)

    damit schaffe ich nur 1bild die sek. :pinch:

    lg
    Nsjdvv

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

    so,ich habs endlich,es lag an etwas anderem ^^

    jetz hab ich aber n anderes problem ;D

    wie kann ich ne Listbox nach den letzten zeichen sortieren?

    also die einträge sind so:

    Quellcode

    1. c:\*pfad*\2.jpg
    2. c:\*pfad*\1.jpg
    3. c:\*pfad*\4.jpg
    4. c:\*pfad*\3.jpg
    5. usw.

    ich möchte aber :

    Quellcode

    1. c:\*pfad*\1.jpg
    2. c:\*pfad*\2.jpg
    3. c:\*pfad*\3.jpg
    4. c:\*pfad*\4.jpg
    5. usw.

    vll kann mir ja noch jemand helfen ^^

    lg
    Nsjdvv

    //Edit: auch gelöst ;)

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

    genau Bernd,dazu habe ich noch eine Funktion gefunden ,womit man nach der Länge sortieren kann.

    Falls diese jemand braucht(Ich habe sie für mich angepasst)

    VB.NET-Quellcode

    1. Private Sub Sort(ByVal listbox As ListBox)
    2. If (listbox.Items.Count > 1) Then
    3. Dim swapped As Boolean
    4. Do
    5. Dim counter As Integer = listbox.Items.Count - 1
    6. swapped = False
    7. While (counter > 0)
    8. If listbox.Items(counter).ToString.Length < _
    9. listbox.Items(counter - 1).ToString.Length Then
    10. Dim temp As Object = listbox.Items(counter)
    11. listbox.Items(counter) = listbox.Items(counter - 1)
    12. listbox.Items(counter - 1) = temp
    13. swapped = True
    14. End If
    15. counter -= 1
    16. End While
    17. Loop While (swapped = True)
    18. End If
    19. End Sub


    Aber ich habe malwieder eine neue frage,gibt es eine andere möglichkeit bilder in ein Array zu laden als:

    VB.NET-Quellcode

    1. Dim Imgs As New List(Of Image)
    2. For i = 1 To ListBox1.Items.Count - 1
    3. Imgs.Add(Bitmap.FromFile(ListBox1.Items(i)))
    4. Next

    ? den das Problem ist,das in die List(of) nicht genug reinpassen :D
    bzw. eine Ganz andere möglichkeit(ich muss diese später in die malisch avi lib laden)
    Mfg.
    Nsjdvv
    genau weiß ich das nicht,aber unter 300 ^^

    wen ich in der schleife die bilder hinein lade,geht bis etwa 150bilder alles gut,danach kommt :

    Quellcode

    1. Eine Ausnahme (erste Chance) des Typs "System.OutOfMemoryException" ist in System.Drawing.dll aufgetreten.


    lg
    gibt es den vll. eine andere möglichkeit die ganzen bilder in der malisch lib zu verwenden.? :S

    so sieht es bis jz aus..:

    VB.NET-Quellcode

    1. Dim i As Integer
    2. For i = 1 To ListBox1.Items.Count - 1
    3. Imgs.Add(Bitmap.FromFile(ListBox1.Items(i)))
    4. 'in der listbox sind die pfade zu den bildern
    5. Next
    6. Dim test As New Malisch_AVI_Creator.Malisch_AVI_Creator
    7. test.CreateAVIFile(Imgs.ToArray(), 25, 800, 600, Application.StartupPath & "\test.avi")

    Bernd schrieb:

    müssen die Bilder denn da zwingend rein ?

    soweit ich weit ich das weiß ja,


    Bernd schrieb:

    geht das nicht mit einem Pfad ?

    das währe das beste,leider weiß ich nicht ob das geht..

    Bernd schrieb:

    was soll dieses Ding denn machen ?

    Das erstellt aus einzelbildern eine Avi datei,ich hab sie nochmal angehangen.

    lg
    Dateien
    • Malisch.dll.rar

      (9,1 kB, 148 mal heruntergeladen, zuletzt: )
    1. benutze quicksort ist schneller als bubble sort
    2. deine festplatte ist übelst lahm. mach es so: Erstelle einen filestream, und schreibe dort jedes bild rein + irgendeinen splitter oder sth like that. eine datei zu schreiben ist wesentlich schneller als viele.
    das sollte schon helfen

    auch eine kleine theroie: 2 threads während der eine am schreiben ist macht der nächste schon die bilden, also einer schreiben, der andere bilder machen

    btw du musst auf 25 pics/secs mindestens kommen sollte nicht einfach sein

    so arbeitet auch screen flow

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

    Ich hab das malisch-ding mal im Objectbrowser angeguckt - scheint mir Mist zu sein.
    Ist doch wohl klar, dass eine Avi aus u.U. sehr umfangreichen Datenmengen gebildet werden muß. Sehr umfangreiche Datenmengen kann man entweder als Stream behandeln, oder man müsste eine Methode .AddImage() anbieten, mittels derer Images auch sukzessive angehängt werden können.
    Aber wies aussieht gibts nur eine Methode .CreateAvi(), und die verlangt ein Array von Images, d.h. die gesamte Datenmenge vollständig im Speicher.

    Also so meine Einschätzung, vlt. überseh ich auch was, oder verkenne technische Sachzwänge.

    Wo ist das Malisch-Dings her?
    so habe mal was anderes probiert,ik hab die andere .dll die dabei ist eingefügt (avilib) ,dort gibt´s die function AddFrame ,aber das video bleibt schwarz :huh:

    ich benutze den code:

    VB.NET-Quellcode

    1. Dim avi As New avilib.AviWriter()
    2. avi.Open("test.avi", 25, 1024, 1024)'avi erstellen/öffnen
    3. For i As Integer = 0 To 104 '104 bilder
    4. Dim gfx As Bitmap = Image.FromFile(Application.StartupPath & "\pic\" & i & ".jpg")
    5. avi.AddFrame()
    6. Next i
    7. avi.Close()


    vll hatt jemand ne ahnung woran es liegd :P