2012-03-13 105 views
1

我想調整大小和安全的圖片我已經做了一些研究,並試圖讓sommething工作。幾乎所有的東西都可以工作,但是保存給了我一個無效的參數例外。 這是我有:將圖片保存到硬盤

 private void ResizeImage(Image image) 
    { 
     int maxWidth = 100; 
     int maxHeight = 100; 
     int imageWidth = image.Size.Width; 
     int imageHeight = image.Size.Height; 

     double maxRatio = (double)maxWidth/(double)maxHeight; 
     double picRatio = (double)imageWidth/(double)imageHeight; 

     Image newImage = null; 
     if (maxRatio > picRatio && imageWidth > maxWidth) 
     { 
      newImage = new Bitmap(image, new System.Drawing.Size(Convert.ToInt32(maxWidth/picRatio), maxHeight));    
     } 
     else if (maxRatio < picRatio && imageHeight > maxHeight) 
     { 
      newImage = new Bitmap(image, new System.Drawing.Size(maxWidth, Convert.ToInt32(maxHeight/picRatio)));   
     } 

     // Encoder parameter for image quality 
     EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality,1); 

     // Jpeg image codec 
     ImageCodecInfo jpegCodec = this.getEncoderInfo("image/jpeg"); 

     if(jpegCodec != null){ 
      EncoderParameters encoderParams = new EncoderParameters(1); 
      encoderParams.Param[0] = qualityParam; 
      newImage.Save(@".\temp\pdf\photos\test.jpg",jpegCodec,encoderParams); 
     } 
    } 

    private ImageCodecInfo getEncoderInfo(string mimeType) 
    { 
     // Get image codecs for all image formats 
     ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders(); 

     // Find the correct image codec 
     for (int i = 0; i < codecs.Length; i++) 
     { 
      if (codecs[i].MimeType == mimeType) 
      { 
       return codecs[i]; 
      } 
     } 
     return null; 
    } 

但是當我嘗試運行它,它給了我在newImage.save無效參數異常()

+0

你應該把最大寬度和最大高度參數,在默認情況下將其設置爲100,因爲從外面沒有人會想到它。 – MrFox 2012-03-16 21:31:23

回答

1

MSDN,編碼質量參數應爲64位(長)值。改變這一行:

var qualityParam = new EncoderParameter(Encoder.Quality, 1); 

var qualityParam = new EncoderParameter(Encoder.Quality, 1L); 
+0

thx,它的工作原理,但質量。是的,這是另一個故事 – jorne 2012-03-13 13:49:47

+0

@jorne:我認爲1L是可怕的,因爲100L是最好的質量(最小壓縮率)。 – Groo 2012-03-13 13:53:03

+0

是的,只是發現了。頭上的坦克1! – jorne 2012-03-13 13:55:23