Laden...

Bild in Panel mit Zoom darstellen

Erstellt von PPaB vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.889 Views
Thema geschlossen
P
PPaB Themenstarter:in
11 Beiträge seit 2014
vor 9 Jahren
Bild in Panel mit Zoom darstellen

Hallo zusammen,

ich habe ein Problem und zwar möchte ich ein Bild in ein Panel laden und danach dort (am schönsten per Mausrad) scrollen. Panel möchte ich benutzen, da ich danach auch dem Benutzer die Möglichkeit geben möchte auf das Bild zu zeichen.

So füge ich das Bild zur Zeit ein, aber es wird nur ein Ausschnitt wirklich eingefügt und nicht das ganze Bild, gibt es eine Möglichkeit das ganze Bild auf der Größe des Panels zu skalieren und so einzufügen?

panel1.BackgroundImage = Image.FromFile(openFileDialog1.FileName);

Und zum anderen habe ich im Internet nach dem Zoomen schaut und dies gefunden:

        private void panel1_MouseWheel(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            if (e.Delta != 0)
            {
                if (e.Delta <= 0)
                {
                    //set minimum size to zoom
                    if (panel1.Width < 50)
                        return;
                }
                else
                {
                    //set maximum size to zoom
                    if (panel1.Width > 500)
                        return;
                }
                panel1.Width += Convert.ToInt32(panel1.Width * e.Delta / 1000);
                panel1.Height += Convert.ToInt32(panel1.Height * e.Delta / 1000);
            }
        }

Leider ist hier das Problem, dass einfach nur die Größe des Panels verändert wird und nicht das Bild selbst.

Wäre um Hilfe dankbar.

Gruß
PPaB

4.939 Beiträge seit 2008
vor 9 Jahren

Hallo und willkommen,

benutze am besten [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox) und zeichne mittels der DrawImage-Methode (die passende Überladung wählen, welche Quell- und Zielgröße als Parameter nimmt) selber das Bild.

PS: Du kannst dir auch mal mein Paint# - eine Zeichenkomponente anschauen 😉

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo PPaB,

wenn du die PictureBox.SizeMode-Eigenschaft(*) passend setzt, würde eine Änderung der Größe der PictureBox auch die Größe des Bildes beeinflussen. Aber gerade wenn der Benutzer auf das Bild zeichnen können soll, würde ich dir wie Th69 empfehlen, gleich alles im Paint-EventHandler zu zeichnen. Dann brauchst du keine PictureBox, sondern kannst ein Panel oder das Form selbst als Zeichenfläche verwenden.

herbivore

PS: (*) Die du durchaus selbst in der Doku hättest finden können. Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1 und [Hinweis] Bitte schau in die SDK-/MSDN-Doku.

P
PPaB Themenstarter:in
11 Beiträge seit 2014
vor 9 Jahren

Ich glaube, ich bräuchte da noch ein bisschen Hilfe, versteh nicht so ganz, wie ich das anfangen soll.

Wie kann ich im Paint Event Handler ein Bild zeichnen bzw. das was ich zeichnen möchte:

private void panel1_Paint(object sender, PaintEventArgs e)
        {
        
        }

Da habe ich jetzt das Paint-Event von dem Panel. Wie kann ich dort nun das Bild zeichen lassen, was ich zuvor in einem Image gespeichert habe?
Gehen wir mal von aus, ich hätte es in die Variable "Bild" gespeichert. Kann ich das nun mit überladen oder wie soll ich darauf zugreifen?

Edit: Wie kann ich dein Paint# verwenden? Ich kann irgendwie kein "Paint" laden mit using Paint

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo PPaB,

ich bräuchte da noch ein bisschen Hilfe

nö, du hast alles, was du brauchst, um jetzt alleine weiterzukommen. In dem Tutorial steht generell, wie man im Paint-EventHandler zeichnet. Die Methode, die man braucht, um Bilder zu zeichnen, hat Th69 dir bereits genannt. (Das du wegen sowas auch selbst in die Doku schauen kannst und solltest, hatte ich schon geschrieben.

herbivore

Thema geschlossen