Bild aus Picturebox skalieren und speichern



  • Hallo,

    über ein openFileDialog lade ich ein Bild in meine Picturebox.
    Anschließend soll das Bild gespeichert werden.

    Das hab würde soweit auch funktionieren:

    pictureBox1.Image.Save("D:\\test.jpg");
    

    Allerdings möchte ich, dass das Bild immer in der gleichen (Pixel) Größe gepeichert wird.
    Wie kann ich das umsetzten?

    Vielen Dank für Eure Hilfe!



  • Indem du das Image aus der Picturebox vorher in ein neues Images mit der vordefinierten Größe zwischenspeicherst und dieses dann speicherst 😉


  • Administrator

    Noch einen Link als Hilfestellung:
    http://msdn.microsoft.com/en-us/library/0wh0045z.aspx

    Grüssli



  • Ich stehe leider auf dem Schlauch 😕

    Bitmap temp = new Bitmap(250, 200);
    temp = pictureBox1.Image;
    temp.Save("D:\\temp.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
    

    Leider funktioniert das auch nicht ... tut mir leid, dass ich hier so billige Sachen nicht weiß/kann, aber ich komme grad echt nicht weiter.



  • "funktioniert nicht" ist keine Fehlermeldung.
    Was genau funktioniert denn nicht?



  • Natürlich, tut mir leid!

    Die Fehlermeldung:

    Der Typ "System.Drawing.Image" kann nicht implizit in "System.Drawing.Bitmap" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.)



  • Du hast dir den Link von Dravere nicht richtig durchgelesen, er hat dir schon den richtigen Konstruktor geschickt. Du musst ihn jetzt nur noch korrekt verwenden 😉



  • Mit dem Link komme ich leider nicht recht weiter, vielleicht habe ich über das Wochenende noch einen Geistesblitz oder es kann mir noch jemand einen kleinen Tipp geben! Danke auf jeden Fall!



  • Na du übergibst dem Konstruktor von Bitmap das Image aus der picturebox1 und die Size die du haben willst. Size ist wiederum eine Klasse(oder struct, ist jetzt ja nich so wichtig) von welcher du ein Objekt erzeugst mit den Größenangaben die du brauchst. Ich bin mir sicher du wirst für diese eine Zeile Code keinen Hilfscode von uns gebrauchen 😉


  • Administrator

    Sonnenlichtfee schrieb:

    Mit dem Link komme ich leider nicht recht weiter, ...

    Was ist denn daran unklar? Du weisst doch, wie man einen Konstruktor einsetzt? Wenn nicht, dann solltest du dringend die Grundlagen durcharbeiten. Ansonsten erklär genauer was unklar ist. Du musst eine Zeile schreiben, wenn wir sie dir einfach hinschreiben, dann habe ich meine Zweifel, dass du viel daraus lernst.

    Oder hast du Mühe mit dem Englisch? Einfach das en-us im Link durch de-de ersetzen:
    http://msdn.microsoft.com/de-de/library/0wh0045z.aspx

    Aber Englisch lesen sollte man in der Programmierung mindestens können 🙂

    Grüssli



  • Kannst knicken, piller ich nicht! ! !



  • Hallo,

    der letzte Eintrag stammt leider nicht von mir!!

    02:13:17 13.02.2011 Titel: Zitieren
    Kannst knicken, piller ich nicht! ! !

    Hier mal mein Code, das Bild wird auch verkleinert, aber leider nicht sakliert, sondern nur ein Ausschnitt auf die von mir angegebene Größe geschnitten:

    Bitmap orgImage = new Bitmap(pictureBox1.Image);
                            Bitmap newImage = new Bitmap(250, 200);
                            Graphics gimage = Graphics.FromImage(newImage);
                            Rectangle compressionRectangle = new Rectangle(0, 0, orgImage.Width / 2, orgImage.Height / 2);
                            gimage.DrawImage(orgImage, compressionRectangle);
    
                            newImage.Save("D:\test.jpg");
    

    Bin ich zuminest auf dem richtigen Weg?
    Danke!


  • Administrator

    Sonnenlichtfee schrieb:

    Bin ich zuminest auf dem richtigen Weg?

    Nein. Und ich stelle nochmals die Frage: Was ist denn bitte an der Dokumentation zu diesem Konstruktor von Bitmap unklar? 😕

    Grüssli



  • Problem:

    Du weisst doch, wie man einen Konstruktor einsetzt?

    Sollte wohl wirklich an den Grundlagen arbeiten, denn genau das ist mein Problem. 😕


  • Administrator

    Dann arbeite dringend die Grundlagen durch! Kannst ja den C# Programming Guide lesen, ist ein guter Einstieg:
    http://msdn.microsoft.com/en-us/library/67ef8sbd.aspx

    Wie man einen Konstruktor nutzt, ist in diesem Guide auch beschrieben:
    http://msdn.microsoft.com/en-us/library/ms173115.aspx

    Wie willst du eine Sprache verwenden, wenn du sie gar nicht lernst? Mit ein wenig rumpröbeln wirst du nirgendwo hinkommen.

    Grüssli



  • So, hier mal meine Lösung.
    Ich weiß zwar nicht, ob es nun wirklich so gemacht ist, wie Ihr vorgeschlagen habt, aber zumindest erreicht ich damit, was ich mir vorgestellt habe:

    public Image skalieren(Image img, int groesse)
            {
                int originalB = img.Width;
                int originalH = img.Height;
                int skaliertB = (int)(originalB * groesse);
                int skaliertH = (int)(originalH * groesse);
    
                Bitmap bmp = new Bitmap(skaliertB, skaliertH);
    
                Graphics graphic = Graphics.FromImage((Image)bmp);
                graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
    
                graphic.DrawImage(img, 0, 0, skaliertB, skaliertH);
                graphic.Dispose();
    
                bmp.Save("C:\\test.jpg");
                return (Image)bmp;
    

    Aufruf:

    skalieren(pictureBox1.Image, 5);
    

    Welche Bücher wären sonst lohnenswert, um richtig in die C# Programmierung rein zu kommen?
    Ich weiß, im Internet gibt es viele Seiten, aber mir ist eben etwas "handfestes" lieber ...

    Danke!


  • Administrator

    Sag mal, wie bist du auf diese Lösung gekommen? Wohl kaum mit rumpröbeln, sondern indem du gewisse Dokumentationen und Seiten gelesen hast. Wenn du dich auf die Sprache konzentriert hättest und auf die Links, welche ich dir gegeben hätte, dann wäre aus der Lösung folgendes geworden:

    var scaledImg = new Bitmap(pictureBox1.Image, new Size(100, 100)); // 100x100 oder halt eine andere Grösse
    scaledImg.Save("C:/test.jpg");
    

    Bücher wurden hier schon viele vorgeschlagen, einfach mal durchsuchen:
    http://www.c-plusplus.net/forum/173222
    http://www.c-plusplus.net/forum/39583
    http://www.c-plusplus.net/forum/272550

    Der C# Programming Guide ist aber wirklich gut. Den sollte man nicht mit einem Tutorial verwechseln. Er stammt ja auch direkt von Microsoft. Auch wenn du dich für ein Buch entscheidest, ich würde dir empfehlen, ihn irgendwo im Hinterkopf zubehalten. Über die MSDN Suche kommt man so auch schnell an zusätzliche Informationen oder kann kurz spicken gehen.
    http://social.msdn.microsoft.com/search/en-us

    Grüssli



  • Weißt Du wie man das als Softwareentwickler macht?

    www.google.de

    Suchbegriffe: Was möchte ich machen!

    c# image skalieren

    dann schaut man was man da braucht.

    Geht auch mit anderen suchbegriffen

    c# bild skalieren
    c# image verkleinern
    c# .. ..... ...
    etc
    etc

    Solche Sachen müsste man nie hier fragen da es tausende Seiten mit Code gibt,.