Image outil en C # Zoomer
-
25-09-2019 - |
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
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;