Инструмент Image Zoomer в c # - PullRequest
0 голосов
/ 17 ноября 2010

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

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

В настоящее время возникает 2 проблемы.Во-первых, он хочет скомпилировать со строкой grap.InterpolationMode = InterpolationMode.HighQualityBicubic;,Вторая проблема заключается в том, что когда я пытаюсь изменить масштаб, появляется сообщение об ошибке: «« ArgumentException is nothandled »error в строке: Bitmap bm = new Bitmap (img, Convert.ToInt32 (img.Width * size.Width), Convert.ToInt32 (img.Height * size.Height)); "Любая помощь будет отличной,

Спасибо

UPDATE Первая ошибка говорит:" Имя "InterpolationMode«не существует в текущем контексте» Вторая ошибка, когда я комментирую эту строку: «NullReferenceException is nothandled» Ссылка на объект не установлена ​​на экземпляр объекта.в строке Bitmap bm = new Bitmap (img, Convert.ToInt32 (img.Width * size.Width), Convert.ToInt32 (img.Height * size.Height));

Спасибо

Ответы [ 2 ]

4 голосов
/ 17 ноября 2010

Включить

using System.Drawing.Drawing2D;

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

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

0 голосов
/ 17 ноября 2010

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

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

grap.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic;


Проблема second в вашем коде заключается в том, что изображение, которое вы указываете в качестве параметра для этого метода (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;
...