2012-02-24 68 views
0

我有以下兩段代碼第一個沒有明確配置Image對象而第二個配置正確。請建議在生產代碼中使用哪一個。在c#中處理圖像對象的最佳做法是什麼?

private bool SavePatientChartImage(byte[] ImageBytes, string ImageFilePath, string IMAGE_NAME, int rotationAngle) 
    { 
     bool success = false; 
     System.Drawing.Image newImage; 
     try 
     { 
      using (MemoryStream stream = new MemoryStream(ImageBytes)) 
      { 
       newImage = System.Drawing.Image.FromStream(stream); 
       switch (rotationAngle) 
       { 
        case 90: 
         newImage.RotateFlip(RotateFlipType.Rotate90FlipNone); 
         break; 
        case 180: 
         newImage.RotateFlip(RotateFlipType.Rotate180FlipNone); 
         break; 
        case 270: 
         newImage.RotateFlip(RotateFlipType.Rotate270FlipNone); 
         break; 
        default: 
         newImage = newImage; 
         break; 
       } 
       newImage.Save(Path.Combine(ImageFilePath, IMAGE_NAME)); 
       success = true; 
      } 
     } 
     catch (Exception ex) 
     { 
      success = false; 
     } 
     return success; 
    } 

private bool SavePatientChartImage(byte[] ImageBytes, string ImageFilePath, string IMAGE_NAME, int rotationAngle) 
    { 
     bool success = false; 
     System.Drawing.Image newImage; 
     try 
     { 
      using (MemoryStream stream = new MemoryStream(ImageBytes)) 
      { 
       using(newImage = System.Drawing.Image.FromStream(stream)) 
       { 
       switch (rotationAngle) 
       { 
        case 90: 
         newImage.RotateFlip(RotateFlipType.Rotate90FlipNone); 
         break; 
        case 180: 
         newImage.RotateFlip(RotateFlipType.Rotate180FlipNone); 
         break; 
        case 270: 
         newImage.RotateFlip(RotateFlipType.Rotate270FlipNone); 
         break; 
        default: 
         newImage = newImage; 
         break; 
       } 
       newImage.Save(Path.Combine(ImageFilePath, IMAGE_NAME)); 
       success = true; 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      success = false; 
     } 
     return success; 
    } 

哪一個宗教跟隨。請建議

+1

很少有人在編程時虔誠地遵循任何建議。編程語言中的每個功能都是針對某種用例添加的,因此,無論何時您遇到該用例(可能很少見 - 例如C goto),都應該使用該功能。 – 2012-02-24 05:37:09

+0

http://stackoverflow.com/a/2809026/555547可能會有所幫助。就個人而言,我只是使用第二個,因爲它不那麼難,它應該在完成時妥善處理資源,但我不是專家。 – Jason 2012-02-24 05:38:53

回答

2

您應該始終在一些地方處置一次性實例。所以採取後者。

你可以讓它多一點可讀性:

 using (MemoryStream stream = new MemoryStream(ImageBytes)) 
     using(var newImage = System.Drawing.Image.FromStream(stream)) 
     { 
     // ... 

注:這是沒有意義有using語句外聲明的變量。你不應該在外面使用它。

相關問題