Вопрос

Я пытаюсь создать панель отслеживания, которая будет увеличивать и уменьшать масштаб изображения в picturebox.Это мой текущий код:

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));
            }
        }
    }
}

В настоящее время он сталкивается с двумя проблемами.Одним из них является то, что он хочет скомпилировать со строкой grap.InterpolationMode = Интерполяционный режим.HighQualityBicubic;.Вторая проблема заключается в том, что когда я пытаюсь увеличить масштаб, появляется сообщение об ошибке:" Ошибка "ArgumentException была необработана" в строке:Bitmap bm = новое растровое изображение (изображение, Преобразовать.ToInt32(изображение.Ширина * размер.Width), преобразовать.ToInt32 (изображение.Высота * размер.Высота));" Любая помощь была бы очень кстати,

Спасибо

Обновить Первая ошибка гласит:"Имя "InterpolationMode" не существует в текущем контексте" Вторая ошибка, когда я комментирую эту строку, заключается в следующем:Исключение NullReferenceException было необработанным "Ссылка на объект не установлена для экземпляра объекта". в строке Bitmap bm = новое растровое изображение(img, Преобразовать.ToInt32(изображение.Ширина * размер.Ширина), Преобразовать.ToInt32 (изображение.Высота * размер.Высота));

Спасибо

Это было полезно?

Решение

Включать в себя

using System.Drawing.Drawing2D;

в вашем списке использования.

Вторая ошибка может быть вызвана либо img быть нулевым или size быть нулевым.

Другие советы

Тот Самый Первый ошибка компилятора, более чем вероятно, вызвана неизвестной ссылкой на InterpolationMode.HighQualityBicubic.Тот Самый InterpolationMode перечисление находится в Drawing2D пространство имен, которое является дочерним пространством имен System.Drawing.

Вы можете исправить эту ошибку, либо добавив дополнительный Using директива для System.Drawing.Drawing2D, или полностью указав пространство имен в вашем коде:

grap.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic;


Тот Самый второй проблема с вашим кодом заключается в том, что изображение, которое вы указываете в качестве параметра для этого метода (img) является нулевой ссылкой.Тот Самый Scroll событие вашего ползунка масштабирования, вероятно, возникает сразу после создания элемента управления (в конструкторе вашей формы), который находится перед кодом в вашей форме Load запускается метод, который создает изображение (загружая его из файла на диске).

Попробуйте добавить нулевую проверку к 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));
        }
    }


Наконец-то, Я заметил, что вы устанавливаете BackgroundImageLayout свойство графического поля, но ни один из размещаемых вами кодов на самом деле не указывает фоновое изображение для графического поля.Вы имели в виду установить SizeMode собственность чтобы настроить способ отображения изображения?Что -то вроде:

picBox.SizeMode = PictureBoxSizeMode.StretchImage;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top