Laden...

Bild für Picturebox aufbereiten und anzeigen

Erstellt von atmosfear vor 15 Jahren Letzter Beitrag vor 15 Jahren 994 Views
A
atmosfear Themenstarter:in
260 Beiträge seit 2004
vor 15 Jahren
Bild für Picturebox aufbereiten und anzeigen

Hallo und schönen Nachmittag zusammen!

Ja ja, kauf habe ich das eine Problem gelöst, komme ich auch schon mit dem nächsten 😃

Ich möchte eine Databinding für eine Picturebox verwenden, und vorher das anzuzeigende Bild entsprechend verkleinern und einpassen.
Wenn gar kein Bild vorhanden ist, gibt diese Funktion "null" zurück. Mit diesem Wert
kann die Picturebox allerdings nichts anfangen und schmeisst eine Exception.

Hier der Code dazu:
Im Main:

                pBoxTagCover.DataBindings.Add(new Binding("Image", this.trackBinder_, "TagCover"));

Und in der Klasse:

        public BitmapTagCover
        {
            get { return ResizeTagCover(); }
        }
        
        private BitmapResizeTagCover()
        {
            Bitmap imgOrig = null;
            Bitmap imgShown = null;

            if (this.tagCovers_.Count > 0)
            {
                double divideBy, divideByW, divideByH;
                Graphics g;

                imgOrig = this.tagCovers_[0];
                divideByW = ((double)imgOrig.Width / 100);
                divideByH = ((double)imgOrig.Height / 100);

                if (divideByW > 1 || divideByH > 1)
                {
                    if (divideByW > divideByH)
                        divideBy = divideByW;
                    else divideBy = divideByH;

                    imgShown = new Bitmap((int)((double)imgOrig.Width / divideBy), (int)((double)imgOrig.Height / divideBy));
                    imgShown.SetResolution(imgOrig.HorizontalResolution, imgOrig.VerticalResolution);
                    g = Graphics.FromImage(imgShown);
                    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                    g.DrawImage(imgOrig, new Rectangle(0, 0, (int)((double)imgOrig.Width / divideBy), (int)((double)imgOrig.Height / divideBy)), 0, 0, imgOrig.Width, imgOrig.Height, GraphicsUnit.Pixel);
                    g.Dispose();
                }
                else
                {
                    imgShown = new Bitmap(imgOrig.Width, imgOrig.Height);
                    imgShown.SetResolution(imgOrig.HorizontalResolution, imgOrig.VerticalResolution);
                    g = Graphics.FromImage(imgShown);
                    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                    g.DrawImage(imgOrig, new Rectangle(0, 0, imgOrig.Width, imgOrig.Height), 0, 0, imgOrig.Width, imgOrig.Height, GraphicsUnit.Pixel);
                    g.Dispose();
                }
                imgOrig.Dispose();
            }
                      
            return imgShown;
        }

Erstens bekomme ich von meiner Funktion den Typ Bitmap zurück und die Picturebox braucht einen Wert vom Typ Image, oder?
Und zweitens kann eben die Picturebox, falls kein Coverbild vorhanden, nichts mit dem Wert null anfangen!?

Hat jemand von euch eine Idee und/oder Tipp für mich?

DANKE
atmosfear

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo atmosfear,

Erstens bekomme ich von meiner Funktion den Typ Bitmap zurück und die Picturebox braucht einen Wert vom Typ Image, oder?

das ist kein Problem, weil jede Bitmap ein Image ist.

Und zweitens kann eben die Picturebox, falls kein Coverbild vorhanden, nichts mit dem Wert null anfangen!?

Gibt statt null ein ein Pixel großes "leeres" Bild zurück.

herbivore

A
atmosfear Themenstarter:in
260 Beiträge seit 2004
vor 15 Jahren

@herbivore

Danke herbivore, hast mir sehr weiter geholfen!
Jetzt habe ich "nur" mehr ein riiiiesen Speicherproblem,
aber sehe selbst meinen Beitrag im anderen Forum.

Speicherprobleme

DANKE
atmosfear