Domanda

Sto cercando di realizzare una barra di tracce che ingrandisce e uscirà in una foto in un PictureBox. Questo è il mio codice attuale:

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));
            }
        }
    }
}

Attualmente presenta 2 problemi. Uno è che vuole compilare con Line Grap.InterpolationMode = InterpolationMode.HighqualityBicubic; . Il secondo problema è che quando provo a zoom viene visualizzato l'errore: "" ArgumentException è stato non gestito "Errore sulla riga: bitmap bm = new Bitmap (img, convert.Toint32 (img.width size.width), converti .Toint32 (img.height * size.height)); "Qualsiasi aiuto sarebbe fantastico,

Grazie

AGGIORNAREIl primo errore dice: "Il nome 'InterpolationMode' non esiste nel contesto corrente" Il secondo errore quando commento questa riga è: 'NullReferenceException era non gestito "Riferimento dell'oggetto non impostato su un'istanza di un oggetto." Sulla linea BitMap bm = new Bitmap (img, convert.Toint32 (img.width * size.width), convert.Toint32 (img.height * size.height));

Grazie

È stato utile?

Soluzione

Includere

using System.Drawing.Drawing2D;

nella tua lista di utilizzo.

Il secondo errore potrebbe essere dovuto a entrambi i img essere null o il size essere null.

Altri suggerimenti

Il primo L'errore del compilatore è più che probabilmente causato da un riferimento sconosciuto a InterpolationMode.HighQualityBicubic. Il InterpolationMode L'enumerazione si trova in Drawing2D spazio dei nomi, che è uno spazio dei nomi di minori di System.Drawing.

È possibile correggere questo errore aggiungendo un ulteriore Using direttiva per System.Drawing.Drawing2D, o qualificando pienamente lo spazio dei nomi nel tuo codice:

grap.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic;


Il secondo Il problema con il tuo codice è che l'immagine che stai specificando come parametro per questo metodo (img) è un riferimento nullo. Il Scroll L'evento del tuo cursore zoom è probabilmente sollevato non appena il controllo è stato creato (nel costruttore del tuo modulo), che è prima del codice nel modulo Load Il metodo viene eseguito, che è ciò che crea l'immagine (caricandola da un file su disco).

Prova ad aggiungere un controllo nullo a Scroll gestore di eventi:

    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));
        }
    }


Infine, Ho notato che stai impostando il BackgroundImageLayout Proprietà della casella Picture, ma nessuno del codice che pubblichi è effettivamente specifica un'immagine di sfondo per la casella Image. Volevi impostare il SizeMode proprietà Per regolare come viene visualizzata l'immagine? Qualcosa di simile a:

picBox.SizeMode = PictureBoxSizeMode.StretchImage;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top