2016-07-22 33 views
0

我的代碼存在問題,我嘗試過string originalImage = null;。 但是這不是真的有效。由於它沒有采取原來的文件名不知爲什麼...C#錯誤CS0103名稱'originalImage'在當前上下文中不存在

代碼:

private void textBox1_Click(object sender, EventArgs e) 
    { 
     FolderBrowserDialog fbd = new FolderBrowserDialog(); 
     fbd.RootFolder = Environment.SpecialFolder.Desktop; 
     fbd.Description = "+++ Select path +++"; 
     fbd.ShowNewFolderButton = false; 

     if (fbd.ShowDialog() == DialogResult.OK) 
     { 
      textBox1.Text = fbd.SelectedPath; 
     } 
     string[] originalImage = Directory.GetFiles(textBox1.Text, "*.JPG"); 

     foreach (var filename in originalImage) 
     { 
      Bitmap bitmap = new Bitmap(filename); 

      //DefaultCompressionJpeg(bitmap); 

      VariousQuality(bitmap); 
     } 
    } 

    string originalImage = null; 

    public void VariousQuality(Image original) 
    { 

     ImageCodecInfo jpgEncoder = null; 
     ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders(); 
     foreach (ImageCodecInfo codec in codecs) 
     { 
      if (codec.FormatID == ImageFormat.Jpeg.Guid) 
      { 
       jpgEncoder = codec; 
       break; 
      } 
     } 
     if (jpgEncoder != null) 
     { 

      Encoder encoder = Encoder.Quality; 
      EncoderParameters encoderParameters = new EncoderParameters(1); 

      for (long quality = 90; quality <= 90;) 
      { 
       EncoderParameter encoderParameter = new EncoderParameter(encoder, quality); 
       encoderParameters.Param[0] = encoderParameter; 

       string fileOut = Path.Combine(@"C:\Users\Kristen\Desktop\pilt2", originalImage + ".jpeg"); 
       Debug.WriteLine(fileOut); 
       FileStream ms = new FileStream(fileOut, FileMode.Create, FileAccess.Write); 
       original.Save(ms, jpgEncoder, encoderParameters); 
       ms.Flush(); 
       ms.Close(); 
      } 
     } 
    } 

親切的問候,

+2

因爲你還沒有宣佈/初始化'originalImage'在你的代碼 – Habib

+1

根據你的代碼的任何地方,你還沒有宣佈'originalImage' 。你說你嘗試過'string originalImage = null;' - 那麼你把它放在哪裏?這很重要。你能否更新你的問題以使這一點更清楚? –

+0

或將方法名稱更改爲'originalImage'。 –

回答

0

在您單擊事件處理程序中,您有一個局部變量string [] originalImage,它使用某個目錄中的所有文件名進行初始化。

在課堂上,您有一個string originalImage的字段,您使用null進行初始化。

這兩個元素確實沒有任何關係,他們是完全無關的。

所以在你的壓縮方法中,你使用originalImage來構造一個文件名。此方法中唯一已知此名稱的實體是類的字符串字段,其值爲null

您應該在壓縮方法中添加第二個參數,將當前文件名傳遞給您的方法,並從類中刪除該字段。

public void VariousQuality (Bitmap original, string filename) { 
    ... 

string fileOut = Path.Combine(@"C:\Users\Kristen\Desktop\pilt2", filename + ".jpeg"); 

} 

調用方法如下隨時隨地

foreach (var filename in originalImage) { 
    Bitmap bitmap = new Bitmap(filename); 
//DefaultCompressionJpeg(bitmap); 
    string fn = Path.GetFileNameWithoutExtension(filename); 
    VariousQuality(bitmap, fn); 
} 
+0

,但現在說sayng這個錯誤'錯誤CS7036沒有給出對應於'Form1.VariousQuality(位圖,字符串)'和'這行'的所需形式參數'filename'的參數VariousQuality(bitmap );' –

+0

好吧,如果你爲方法添加一個參數,當你調用它的時候,你還必須爲它提供一個值。對不起,我沒有提到。使用循環中的文件名,但一定要刪除路徑和擴展名。 – derpirscher

+0

還有同樣的錯誤 –

0

正如有人在評論(他們神祕刪除,因爲他們肯定要發生什麼)建議,它似乎像你想指original說法:

public void VariousQuality(Image original) 

只需將該參數重命名爲originalImage或將代碼中的另一個重命名爲original即可。

+0

仍然沒有取原始文件名 –

相關問題