Question

Je suis en train de faire une trackbar qui zoomer et dézoomer sur une photo dans un picturebox. Ceci est mon code actuel:

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

Actuellement, il arrive avec 2 problèmes. Un être ne veut compiler avec la ligne grap.InterpolationMode = InterpolationMode.HighQualityBicubic; . Le deuxième problème est que lorsque je tente de l'agrandir arrive avec l'erreur: " « ArgumentException était non gérée » erreur sur la ligne: Bitmap bm = new Bitmap (img, Convert.ToInt32 (img.Width * size.Width), Convertir .ToInt32 (img.Height * size.Height)); "Toute aide serait grande,

Merci

UPDATE La première erreur dit: « Le nom « InterpolationMode »n'existe pas dans le contexte actuel » La deuxième erreur quand je cette ligne en commentaire est: « NullReferenceException était non gérée « Référence d'objet non définie à une instance d'un objet. » sur la ligne Bitmap bm = new Bitmap (img, Convert.ToInt32 (img.Width * size.Width), Convert.ToInt32 (img.Height * size.Height));

Merci

Était-ce utile?

La solution

Inclure

using System.Drawing.Drawing2D;

dans votre liste à l'aide.

La deuxième erreur peut être due soit à la img étant nulle ou la size étant nulle.

Autres conseils

L'erreur premier compilateur est plus que probable provoquée par une référence inconnue InterpolationMode.HighQualityBicubic. L'énumération InterpolationMode se trouve dans l'espace de noms Drawing2D, qui est un espace de noms d'enfants de System.Drawing.

Vous pouvez corriger cette erreur soit en ajoutant une directive Using supplémentaire pour System.Drawing.Drawing2D, ou entièrement l'espace de noms qualifiant dans votre code:

grap.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic;


seconde problème avec votre code est que l'image vous spécifiez comme paramètre à cette méthode (img) est une référence nulle. L'événement Scroll de votre curseur de zoom est probablement se levé dès que le contrôle est créé (dans le constructeur de votre formulaire), qui est avant le code dans la méthode de Load de votre formulaire est exécuté, ce qui est ce qui crée l'image (en le chargeant d'un fichier sur le disque).

Essayez d'ajouter un contrôle nul au gestionnaire d'événements Scroll:

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


Enfin , je remarque que vous définissez la propriété BackgroundImageLayout de la zone d'image, mais aucun du code que vous postez spécifie réellement une image d'arrière-plan pour la zone d'image. Vouliez-vous dire définir la propriété SizeMode pour ajuster la façon dont l'image est affichée? Quelque chose comme:

picBox.SizeMode = PictureBoxSizeMode.StretchImage;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top