Bildabmessungen prüfen



  • Guten Morgen!

    Auf meiner Form habe ich einen OpenFileDialog erstellt und das Hochladen einer Datei (Bilder) klappt auch wunderbar.

    Allerdings habe ich dazu noch eine Anforderung:

    Das Bild darf nur verwendet werden, wenn bestimmte Abmessungen nicht überschritten werden. Wie kann ich prüfen, welche Abmessungen mein Bild hat?

    Hoffe jemand kann mir einen Tipp geben - vielen Dank!



  • Bitmap.FromFile() und dann die Eigenschaften von System.Drawing.Bitmap verwenden



  • Wenn du aber nun glaubst das Du ein Bild erst hochladen musst wenn die Abmessung stimmt dann hast Du dich getäuscht. ASPNET kann erst überprüfen wenn die Datei am Server liegt.
    Möchtest Du es am Client machen braucht DU einen Uploader.
    z.B. mit Flash, JAVA,Silverlight.
    Da kannst du vorher überprüfen wie groß das Bild ist.
    Mit Silverlight und Java kannst du es sogar vorher anzeigen ohne es hochzuladen.



  • Hm... Wo ist der Hinweis das es sich um ASP handelt ?



  • Ok, das bedeutet, das einfachste wäre, das Bild liegt schon in der richtigen Größe (bzw. mit den maximal möglichen Abmessungen) vor?!

    Nun aber noch eine andere Frage:

    Ich lade das Bild hoch (C:\Bilder) und möchte eine Kopie im Hintergrund, ohne dass der Nutzer es merkt, auf D:\Produktbilder speichern.
    Kann ich dazu den SaveFileDialog verwenden? Wobei es dann ja nicht im Hintergrund stattfinden würde, oder?

    Danke für Euere Hilfe!



  • Als Nachtrag: C#

    Denke es wäre aber trotzdem von Vorteil, wenn das Bild bereits in der richtigen Größe vorliegen würde.



  • C# geht auch im Zusammenhang mit ASP.

    Ist es nun eine WindowsForms (WPF) Anwendung oder eine ASP.Net (Silverlight) Geschichte ?

    Ansonsten: Schau doch auch mal in die MSDN z.b. unter SaveFileDialog. Eigeninitiative ist gefragt.



  • Knuddlbaer schrieb:

    Hm... Wo ist der Hinweis das es sich um ASP handelt ?

    OpenFileDialog, Hochladen



  • OK, SaveFileDialog ist wiederum ein Clientprogramm denn das gibt es bei ASPNET nicht.



  • Du kannst mit dem Bild machen was Du möchtest. Größe, etc.
    Sag mal ob es WINFORMS, SILVERLIGHT, ASPNET, oder sonstwas ist.

    Wenn es ASPNET ist kannst du das Bild auch 1000 Mal am Server hinundher kopieren.
    Am Client kannst Du dir nicht sicher sein ob es D:\Produktbilder gibt.
    Auch dort kannst das Bild kopieren wie du möchtest ohne das der User etwas merkt.
    Kannst ihm da auch die Platte löschen wenn du möchtest.



  • OpenFileDialog und Hochladen gibts auch in Desktopanwendungen. Man denkt einfach nur in den Gebieten die man selbst alltäglich verwendet ;o)



  • Tut mir leid für die wenigen Angaben von mir: C# -> WINFORM

    Zum Speichern habe ich folgendes mal versucht, jedoch wird gar nichts gespeichert.
    Das liegt wohl daran, dass ich keine Datei dahinter habe, oder?
    Wie/wo muss ich meine Ursprungsdatei (also von C:\Bilder) zuweisen? Reicht da der Pfad?

    saveFileDialog1.DefaultExt = "jpg";
                saveFileDialog1.Filter = "jpg files (*.jpg)|*.jpg|All files (*.*)|*.*";
                saveFileDialog1.AddExtension = true;
                saveFileDialog1.RestoreDirectory = true;
    
                saveFileDialog1.Title = "Speicherort?";
    
                saveFileDialog1.InitialDirectory = @"D:\Produktbilder";
                saveFileDialog1.FileName = speicherArtNr;
    
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    MessageBox.Show("Speicherort: " + saveFileDialog1.FileName);
                }
                else
                {
                    MessageBox.Show("You hit cancel or closed the dialog.");
                }
                saveFileDialog1.Dispose();
                saveFileDialog1 = null;
    


  • http://msdn.microsoft.com/de-de/library/system.windows.forms.savefiledialog.aspx

    Fordert den Benutzer zur Auswahl eines Speicherorts für eine Datei auf. Diese Klasse kann nicht geerbt werden.



  • Hat geklappt, eigentlich ganz einfach ...

    File.Copy(sourcepath, destinationpath);
    

    Dankeschön!



  • Problem noch nicht ganz gelöst.

    Wenn ich die Datei überschreiben möchte, dann wollte ich die vorhandene Datei löschen und die neue wieder kopieren. Allerdings wird meine Datei nicht gelöscht ...

    File.Delete(destinationpath);
    File.Copy(sourcepath, destinationpath);
    

    Kann mir jemand sagen warum??
    Meine Pfadangabe stimmt, sonst würde es mit dem kopieren ja nicht funktionieren ...





  • @Knuddelbaer
    Tut mir leid, wenn ich mich so blöd anstelle ... 😞

    Hab das Kopieren/Löschen wie hier gezeigt versucht umzusetzten:
    http://msdn.microsoft.com/en-us/library/system.io.file.copy(VS.71).aspx

    Wie gesagt, Kopieren klappt wunderbar!
    Nur das Löschen nicht. Und ich würde mich wirklich über einen Tipp freuen ...



  • Geht nicht ist keine Fehlerbeschreibung. In Deinem Code löschst Du eine Datei und kopierst darauf wieder eine an den gleichen Punkt an dem Du zuvor gelöscht hast.

    Wenn Du jetzt erwartest das es keine Datei mehr gibt weiß ich nicht wie ich helfen soll.

    Welches Ergebnis wird erwartet, wie schaut das Ergebnis aus ? Gibt es eine Exception ? Fehlermeldungen ?



  • Ok, danke. Hab nun hoffentlich verstanden was Du meinst! Gelobe Besserung!

    Das Problem ist, dass die Datei gar nicht gelöscht wird, sie ist nie weg, dass eine neue rein kopiert werden könnte.
    Wenn die Anweisung

    File.Delete(destinationpath);
    

    ausgeführt wird, lande ich immer in meiner catch-Schleife.

    Selbst wenn ich "hart-codiert" einen Dateipad angebe (der sicher so existiert) z.B.

    File.Delete(@"D:\Produktbilder\HA-01.jpg");
    

    geht es nicht.

    Ich hoffe, mein Problem ist nun verständlicher?!
    Anbei mal die ganze Funktion ...

    //Kopieren des Bildes in das neue Verzeichnis und Speichern der Daten in der DB
            public void BildKopieren(string speicherArtNr, string sourcepath)
            {
                try
                {
                    if (vorhanden == true)
                    {
                        string destinationpath;
                        destinationpath = strPfad + speicherArtNr + ".jpg";
    
                        File.Delete(destinationpath);
    
                        //Kopieren der Datei in das neue Verzeichnis
                        File.Copy(sourcepath, destinationpath);
    
                        MessageBox.Show("Speicherort: " + destinationpath);
                        lblPfad.Text = destinationpath;
                    }
                    else
                    {
                        string destinationpath;
                        destinationpath = strPfad + speicherArtNr + ".jpg";
                        File.Copy(sourcepath, destinationpath);
    
                        MessageBox.Show("Speicherort: " + destinationpath);
                        lblPfad.Text = destinationpath;
                    }
                }
                catch
                {
                    MessageBox.Show("Das Bild wurde nicht im neuen Verzeichnis gespeichert", "Fehler", MessageBoxButtons.OK);
                }
            }
    


  • Du hast erst angefangen , hm ?

    catch (Exception ex)
                {
                    MessageBox.Show(ex.Message,"Der Grund");
                    MessageBox.Show("Das Bild wurde nicht im neuen Verzeichnis gespeichert", "Fehler", MessageBoxButtons.OK);
                }
    

    In der Exception steht warum es nicht klappt.


Anmelden zum Antworten