0

我正在尝试制作一个跟踪栏,它将放大和缩小图片框中的图片。这是我当前的代码:

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 was unhandled” 错误:Bitmap bm = new Bitmap(img, Convert.ToInt32(img.Width * size.Width), Convert .ToInt32(img.Height * size.Height)); " 任何帮助都会很棒,

谢谢

更新 第一个错误说:“当前上下文中不存在名称'InterpolationMode'”当我注释掉这一行时的第二个错误是:'NullReferenceException 未处理“对象引用未设置为对象的实例。” 就行 Bitmap bm = new Bitmap(img, Convert.ToInt32(img.Width * size.Width), Convert.ToInt32(img.Height * size.Height));

谢谢

4

2 回答 2

4

包括

using System.Drawing.Drawing2D;

在您的使用列表中。

第二个错误可能是由于为img空或size为空。

于 2010-11-17T10:54:15.493 回答
-1

一个编译器错误很可能是由对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;
于 2010-11-17T10:55:26.510 回答