2011-12-24 2 views
0

У меня есть приложение для совместного использования изображений, где пользователи загружают изображения, и я беру эскизы этих изображений ... как всегда, все работает нормально, но иногда размер изображения (600 * 800) составляет почти 1 мб, что очень огромная, так или иначе, чтобы изменить разрешение изображения или что-то такое, чтобы сделать такой размер. 100 кб или что-то в этом роде. это мой код.Создание изображения миниатюры меньше

Bitmap bmp = new Bitmap(Width, Height); 
      System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmp); 
      gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 
      gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; 
      gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; 
      gr.PixelOffsetMode = PixelOffsetMode.HighQuality; 

      System.Drawing.Rectangle rectDestination = new System.Drawing.Rectangle(0, 0, Width, Height); 
      System.Drawing.Size rs = new System.Drawing.Size(); 
      rs.Height = Height; 
      rs.Width = Width; 
      gr.DrawImage(originalImage, new Rectangle(new Point(0, 0), rs), 0, 0,  originalImage.Width, originalImage.Height, GraphicsUnit.Pixel); 
      string thumbnailPath = string.Concat(pathToSaveIn, thumbnailName); 
      bmp.Save(thumbnailPath); 
      gr.Dispose(); 
+0

Какой язык это? Visual C++? – Blender

ответ

3

Код изменения размера изображения выглядит ОК (на первый взгляд). Тем не менее, вы сохраняете изображение в растровом формате, который без потерь - следовательно, большой размер файла.

Возможно, вы захотите использовать JPEG вместо миниатюры: для фотографий и т. Д. Это дает хорошее сжатие.

Это может помочь:

public void SaveImage(Bitmap image, string filename) 
    { 
     long quality = 80L; // adjust as appropriate 

     var qualityEncoder = Encoder.Quality; 

     using (var encoderParameter = new EncoderParameter(qualityEncoder, quality)) 
     using (var encoderParams = new EncoderParameters(1)) 
     { 
      encoderParams.Param[0] = encoderParameter; 
      var jpegEncoder = GetEncoder(ImageFormat.Jpeg); 
      image.Save(filename, jpegEncoder, encoderParams); 
     } 
    } 

    private static ImageCodecInfo GetEncoder(ImageFormat format) 
    { 
     ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders(); 

     return codecs 
      .Where(codec => codec.FormatID == format.Guid) 
      .FirstOrDefault(); 
    } 
Смежные вопросы