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

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.interpoletationmode = InterPoLationMode.highQualityBicubic进行编译。 。第二个问题是,当我尝试缩放时,它会出现错误:“”参数exception在行中没有“未经处理”错误:bitmap bm = new Bitmap(img,convert.toint32(img.width * size.width),转换.toint32(img.height * size.height));“任何帮助都很好,

谢谢

更新第一个错误说:“当前上下文中的名称''InterpolationMode'不存在。当我评论此行时,第二个错误是:'NullReferenceException未经用来“对象参考未设置为对象的实例”。在线路上bm = new bitmap(img,convert.toint32(img.width * size.width),convert.toint32(img.height * size.height));

谢谢

有帮助吗?

解决方案

包括

using System.Drawing.Drawing2D;

在您的使用列表中。

第二个错误可能是由于 img 无效或 size 无效。

其他提示

第一的 编译器错误很可能是由于未知引用引起的 InterpolationMode.HighQualityBicubic. 。这 InterpolationModeDrawing2D 名称空间,这是一个儿童名称空间 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