CommonSaveFileDialog -> gibt es beim Klicken einen Unterschied?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Bartosz.

    CommonSaveFileDialog -> gibt es beim Klicken einen Unterschied?

    Guten Tag,

    ich bin gerade etwas sprachlos... Ich habe ein kleines Videoprojekt erstellt. Das funktioniert alles super. Die Accord dlls eingebunden, alles fertig geschrieben. Ist ein schönes Video geworden. Nun wollte ich einen CommonSaveFileDialog (Microsoft.WindowsAPICodePack.Dialogs) hernehmen, um den Pfad festzulegen. Pfad & ".mp4" ist dann der endgültige Pfad.

    Obskurerweise scheint es einen Unterschied zu geben, ob ich im InitialDirectory (Desktop) den Namen eingebe und fortfahre, oder ob ich nochmal links woanders hin klicke und dann fortfahre. Bei letzteren bricht der VideoFileWriter ab, mit einer Accord.Video.VideoException.

    Ich weiß durch diverse Threads auf Stackoverflow, dass dieser VideoFileWriter sehr verbuggt ist. Daher auch die ganzen Mätzchen in meinem Code. Man muss zum Beispiel nochmal nachprüfen, ob der wirklich offen ist, solange dann mit Application.DoEvents() nachhelfen....

    Liegt das nun am VideoFileWriter oder am SaveFileDialog?

    In Button1_Click:

    VB.NET-Quellcode

    1. Using SFD As New SaveFileDialog
    2. SFD.Title = "Wo soll das Video gespeichert werden?"
    3. SFD.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
    4. If SFD.ShowDialog() = DialogResult.OK Then
    5. SpeicherName = System.IO.Path.GetFullPath(SFD.FileName)
    6. Else
    7. Exit Sub
    8. End If
    9. End Using


    SpeicherName ist eine globale Variable (String). Sie wird oben mit "" deklariert. Im VideoFileWriter kommt wie gesagt noch

    Quellcode

    1. SpeicherName & ".mp4"
    dazu.

    Bei beiden Situationen enthält die Variable denselben Pfad. ?( Übrigens: Als vorher der hardcodierte Pfad drin war, gab's auch keine Probleme.
    Bilder
    • Bild 1 - hier klappts (2) - Kopie.png

      182,29 kB, 1.022×682, 66 mal angesehen
    • wenn man aber links auf Desktop klickt (2) - Kopie.png

      177,3 kB, 987×676, 63 mal angesehen
    • ...dann klappt's nicht (2) - Kopie.png

      157,98 kB, 1.000×682, 61 mal angesehen
    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.
    @Bartosz Kann es sein, dass Du beim dritten Bild in einem anderen Pfad gelandet bist?
    Gib die Pfade mal explizit aus.
    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 laut Überwachung ist der String immer gleich. Und selbst wenn ich in Bilder speichere, dürfte das keinen Abbruch verursachen.
    Bilder
    • immer gleich.jpg

      16,36 kB, 761×84, 57 mal angesehen
    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.
    Der Abbruch wird von der .dll verursacht. (siehe Accord.Video.VideoException). Von daher ist es spekulativ zu sagen was genau da schief läuft, da du den Code innerhalb der Library vermutlich nicht einsehen kannst, oder? Das einzige was ich mir vorstellen könnte ist, dass deine Applikation nicht auf den Desktop schreiben darf. Da gibt es meines Wissens nach häufiger Probleme. Kannst du das ggf. mal mit einem anderen Pfad testen, am besten innerhalb deiner Eigenen Dateien?


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.
    Hallo @Yanbel Ich habe versucht, bei Eigene Bilder zu schreiben, das klappt auch nur manchmal.

    Vielleicht habe ich gerade noch etwas gefunden:
    Es werden ja Einzelbilder genommen und daraus wird ein Video gemacht. Nun ist es so, dass die Videogröße immer die Bitmap.Size.Width und Height entspricht. Wenn ich 1920x1080 Bilder nehme, gibt's weniger oft die Probleme mit dem Pfad (1:5 etwa), als wenn ich große Serienbilder vom Smartphone nehme (crasht jedes zweite Mal, auch wenn ich den Pfad belasse).
    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.
    Spekulatius: Klingt so, als ob versucht wird ein Video zu speichern, welches noch gar nicht vollkommen konvertiert wurde.
    Wie ist denn der Codeunterschied zwischen fixem Pfad und Dialognutzung?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed Es gibt nur den Codeunterschied in dem Sinne, dass ich einen SaveFileDialog nehme oder nicht. Am FileWriter wird nichts geändert (außer dass die Variable Pfad drinsteht statt "C:\Users\.."

    Ich habe den Nachmittag damit verbracht, am Problem zu arbeiten. Folgendes ist mir noch aufgefallen

    1) große Bilder, wie von heutigen Smartphones (4032 x 3024, 12 MP) bereiten Probleme (Accord.Video.VideoException fliegt), was heute morgen noch ging!!. Bilder von "alten Digitalkameras", 3648 x 2736 ( < 10 Megapixel) sind OK.
    2) Alle Bilder müssen gleich groß (i.e. Höhe, Breite) sein. Bilder im Hochkantformat werden nicht akzeptiert und verwendet. (war eh nur testhalber)
    3) Auf den Desktop zu schreiben macht öfter Probleme als z.B. in den repos-Ordner. Komisch sowas :?:
    4) Mit dem Codec VideoCodec.MPEG4 läuft es wesentlich flüssiger als mit VideoCodec.H264. Nur 1/3 des RAM-Verbrauchs, also 330MB statt 1GB. Somit gehen auch große 12-MP-Bilder.
    5) PC-Neustart bringt aber nichts, wie man hätte vermuten können. Es liegt anscheinend nicht am RAM.

    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.
    OK Planänderung!
    Ich habe dieses Testprojekt erstellt, um zu experimentieren.
    Ich möchte nun konkret Bilder (12 MP) zu einem Full-HD-Video machen (1920 x 1080 = 2 MP). Dafür müssen die Bilder programmintern geschrumpft werden. Wie geht das?
    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.