Frage

Ich versuche eine Trackbar zu erstellen, die auf einem Bild in einer Bildbox ein- und ausgeht. Dies ist mein aktueller Code:

namespace Zoom_in_and_Out_Tool
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private Image imgOriginal;

        private void Form1_Load(object sender, EventArgs e)
        {
            // set image location
        imgOriginal = Image.FromFile(@"C:\New Folder\picture1.jpg");
        picBox.Image = imgOriginal;

        // set Picture Box Attributes
        picBox.BackgroundImageLayout = ImageLayout.Stretch;

        // set Slider Attributes
        zoomSlider.Minimum = 1;
        zoomSlider.Maximum = 5;
        zoomSlider.SmallChange = 1;
        zoomSlider.LargeChange = 1;
        zoomSlider.UseWaitCursor = false;

        // reduce flickering
        this.DoubleBuffered = true;
        }

        public Image PictureBoxZoom(Image img, Size size)
        {
        Bitmap bm = new Bitmap(img, Convert.ToInt32(img.Width * size.Width), Convert.ToInt32(img.Height * size.Height));
        Graphics grap = Graphics.FromImage(bm);
        grap.InterpolationMode = InterpolationMode.HighQualityBicubic;
        return bm;
        }

        private void zoomSlider_Scroll(object sender, EventArgs e)
        {
        if (zoomSlider.Value > 0)
            {
            picBox.Image = null;
            picBox.Image = PictureBoxZoom(imgOriginal, new Size(zoomSlider.Value, zoomSlider.Value));
            }
        }
    }
}

Derzeit hat es 2 Probleme. Eines ist, es möchte mit dem Linien -Grap.InterpolationMode = InterpolationMode.HighQualityBicubic zusammenstellen; . Das zweite Problem ist, dass es beim Zoomen beim Zoom auf dem Fehler auftritt: "" ArgumentException wurde nicht gehandelt "Fehler in der Zeile: Bitmap BM = New Bitmap (IMG, Convert.toint32 (IMG.Width * size.width), Convert .Toint32 (img.height * size.height)); "Jede Hilfe wäre großartig,

Vielen Dank

AKTUALISIERENDer erste Fehler lautet: "Der Name 'InterpolationMode' existiert im aktuellen Kontext nicht" Der zweite Fehler, in dem ich diese Zeile kommentiere, lautet: 'NullReferencexception wurde nicht gehandelt "Objektreferenz nicht auf eine Instanz eines Objekts". Auf der Linie Bitmap BM = New Bitmap (IMG, convert.toint32 (img.width * size.width), convert.toint32 (img.Height * size.height));

Vielen Dank

War es hilfreich?

Lösung

Enthalten

using System.Drawing.Drawing2D;

in Ihrer Verwendung Liste.

Der zweite Fehler könnte auf beide zurückzuführen sein img Null sein oder die size Null sein.

Andere Tipps

Das Erste Der Compiler -Fehler wird mehr als wahrscheinlich durch einen unbekannten Hinweis auf verursacht InterpolationMode.HighQualityBicubic. Das InterpolationMode Aufzählung findet sich in der Drawing2D Namespace, ein Kindernamenspace von System.Drawing.

Sie können diesen Fehler entweder durch Hinzufügen eines zusätzlichen Hinzufügens beheben Using Richtlinie für System.Drawing.Drawing2D, oder durch vollständige Qualifizierung des Namespace in Ihrem Code:

grap.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic;


Das zweite Problem mit Ihrem Code ist das Bild, das Sie als Parameter für diese Methode angeben (img) ist eine Nullreferenz. Das Scroll Der Ereignis Ihres Zoom -Schiebers wird wahrscheinlich erhöht, sobald die Kontrolle erstellt wird (im Konstruktor Ihres Formulars), das vor dem Code in Ihrem Formular liegt Load Die Methode wird ausgeführt, was das Bild erstellt (indem es aus einer Datei auf der Festplatte geladen wird).

Fügen Sie dem Hinzufügen eines Null -Checks in die Scroll Event -Handler:

    private void zoomSlider_Scroll(object sender, EventArgs e)
    {
    if ((zoomSlider.Value > 0) && (imgOriginal != null))
        {
        picBox.Image = null;
        picBox.Image = PictureBoxZoom(imgOriginal, new Size(zoomSlider.Value, zoomSlider.Value));
        }
    }


Endlich, Ich habe festgestellt, dass Sie die festlegen BackgroundImageLayout Eigenschaft des Bildfelds, aber keiner der von Ihnen veröffentlichen Code gibt tatsächlich ein Hintergrundbild für das Bildfeld an. Wollest du das festlegen SizeMode Eigentum Um anzupassen, wie das Bild angezeigt wird? Etwas wie:

picBox.SizeMode = PictureBoxSizeMode.StretchImage;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top