2010-11-17 86 views
0

我正在试图制作一个可以放大和缩小图片框中的图片的跟踪栏。这是我目前的代码:c中的图像缩放工具#

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是未处理“错误在线:位图bm =新位图(img,Convert.ToInt32(img.Width * size.Width),转换.ToInt32(img.Height * size.Height)); “任何帮助将是巨大的,

感谢

UPDATE 第一个错误说:” 这个名字 'InterpolationMode' 不当前存在上下文“ 第二个错误,当我评论这条线是:'NullReferenceException未处理”对象引用未设置为对象的实例。'就行位图BM =新位图(IMG,Convert.ToInt32(img.Width * size.Width),Convert.ToInt32(img.Height * size.Height));

由于

+0

第一个和第二个内部异常详细信息的补充错误是什么? – 2010-11-17 10:45:16

回答

4

包括

using System.Drawing.Drawing2D; 

在您使用列表。

第二个错误可能是由于无论是img被空或size被空。

-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 property来调整图像的显示方式?例如:

picBox.SizeMode = PictureBoxSizeMode.StretchImage;