2010-11-17 5 views
0

J'essaie de créer une barre de suivi qui fera un zoom avant et arrière sur une image dans une zone d'image. Ceci est mon code actuel:Outil Image Zoomer dans C#

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 en résulte 2 problèmes. Un étant qu'il veut compiler avec la ligne grap.InterpolationMode = InterpolationMode.HighQualityBicubic; . Le deuxième problème est que lorsque j'essaie de zoomer, il arrive avec l'erreur: "" ArgumentException was unsledled "erreur à la ligne: Bitmap bm = new Bitmap (img, Convert.ToInt32 (img.Width * taille.largeur), Convertir .ToInt32 (img.Height * size.Height)); "Toute aide serait grande,

Merci

MISE à JOUR la première erreur indique:" le nom 'InterpolationMode' n'existe pas dans le courant context " La deuxième erreur lorsque je commente cette ligne est: 'NullReferenceException was unshandled" La référence d'objet n'est pas définie sur 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

+0

Quelle est l'erreur de compilation pour le premier et les détails d'exception interne pour le second? –

Répondre

4

Inclure

using System.Drawing.Drawing2D; 

dans votre liste à l'aide.

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

-1

le première erreur de compilateur est plus que probablement causé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 enfant de System.Drawing.

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

grap.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic; 


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

Essayez d'ajouter un chèque 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 remarquai que vous définissez la propriété BackgroundImageLayout de la zone d'image, mais aucun du code que vous postez est en train de spécifier une image de fond pour la zone d'image. Voulez-vous définir le SizeMode property pour ajuster la façon dont l'image est affichée? Quelque chose comme:

picBox.SizeMode = PictureBoxSizeMode.StretchImage;