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

¿Fue útil?

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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top