2010-11-17 72 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;