Herramienta de zoomer de imagen en C#
-
25-09-2019 - |
Pregunta
Estoy tratando de hacer una barra de pistas que se acercará y saldrá en una imagen en una caja de imágenes. Este es mi código actual:
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));
}
}
}
}
Actualmente se les ocurre 2 problemas. Uno es que quiere compilar con la línea Grap.interpolationMode = InterpolationMode.highQualityBicubic; . El segundo problema es que cuando trato de hacer zoom presenta el error: "" ArgumentException no fue controlado "Error en la línea: bitmap bm = new bitmap (img, convers.toint32 (img.width * size.width), convertir .Toint32 (img.Height * size.Height)); "Cualquier ayuda sería genial,
Gracias
ACTUALIZAREl primer error dice: "El nombre 'InterpolationMode' no existe en el contexto actual" El segundo error cuando comento esta línea es: 'NullReferenceException no fue controlada "Referencia de objeto no establecida en una instancia de un objeto'. En la línea BitMap BM = nuevo BitMap (img, convert.Toint32 (img.width * size.width), convert.Toint32 (img.height * size.height));
Gracias
Solución
Incluir
using System.Drawing.Drawing2D;
en tu lista de uso.
El segundo error podría deberse a la img
ser nulo o el size
siendo nulo.
Otros consejos
los primero El error del compilador es muy probable que sea causado por una referencia desconocida a InterpolationMode.HighQualityBicubic
. los InterpolationMode
La enumeración se encuentra en el Drawing2D
espacio de nombres, que es un espacio de nombres para niños de System.Drawing
.
Puede corregir este error agregando un adicional Using
directiva System.Drawing.Drawing2D
, o calificando completamente el espacio de nombres en su código:
grap.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic;
los segundo El problema con su código es que la imagen que está especificando como parámetro para este método (img
) es una referencia nula. los Scroll
El evento de su control deslizante de zoom probablemente se plantee tan pronto como se cree el control (en el constructor de su formulario), que es antes del código en su formulario Load
Se ejecuta el método, que es lo que crea la imagen (cargándola desde un archivo en el disco).
Intente agregar una verificación nula al Scroll
controlador de eventos:
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));
}
}
Finalmente, Noté que estás configurando el BackgroundImageLayout
Propiedad del cuadro de imagen, pero ninguno de los códigos que publica realmente especifica una imagen de fondo para el cuadro de imagen. ¿Querías establecer el SizeMode
propiedad ¿Para ajustar cómo se muestra la imagen? Algo como:
picBox.SizeMode = PictureBoxSizeMode.StretchImage;