Strumento di Zoomer Image in C#
-
25-09-2019 - |
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
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;