2015-02-09 2 views
1

Я иду эта функция форма интернет. Это уменьшает размер изображения до 50%. Теперь я не могу вернуть функцию формы растрового изображения ниже.Обратный растровый образ из функции после снижения качества

Я не могу найти какой-либо метод, для которого текущий растровый образ равен 50% и вернуть его.

Нужно ли создать поток памяти, а затем сохранить его там?

//reduce Image size 
public void ReduceImageSize(Bitmap bmp1) 
{ 
    var jgpEncoder = GetEncoder(ImageFormat.Jpeg); 
    // Create an Encoder object based on the GUID 
    // for the Quality parameter category. 
    var myEncoder = Encoder.Quality; 
    // Create an EncoderParameters object. 
    // An EncoderParameters object has an array of EncoderParameter 
    // objects. In this case, there is only one 
    // EncoderParameter object in the array. 
    var myEncoderParameters = new EncoderParameters(1); 

    var myEncoderParameter = new EncoderParameter(myEncoder, 50L); 
    myEncoderParameters.Param[0] = myEncoderParameter; 
    //rather than saving it should set to the current bitmap image. 
    //bmp1.Save(@"c:\TestPhoto\TestPhotoQualityFifty.jpg", jgpEncoder, myEncoderParameters); 


} 
private static ImageCodecInfo GetEncoder(ImageFormat format) 
{ 
    var codecs = ImageCodecInfo.GetImageDecoders(); 
    foreach (var codec in codecs) 
    { 
     if (codec.FormatID == format.Guid) 
     { 
      return codec; 
     } 
    } 
    return null; 
} 
} 

ответ

2

Вы должны сохранить свой файл в памяти только, а затем построить новый образ из этой памяти:

using(var ram = new MemoryStream()) 
{ 
    bmp1.Save(ram, jgpEncoder, myEncoderParameters); 
    ram.Seek(0, SeekOrigin.Begin); // reset stream to start so it can be read again 
    return new Bitmap(ram); 
} 
+0

Есть ли какой-либо вопрос памяти может прийти, если мы используем эту функцию, если вы звоните в этом функция очень частая. Средством может быть изображение в секунду со средним размером 20 т 25 кб? –

+0

Поскольку поток памяти «Dispose» после каждого вызова, я не вижу никаких проблем с ним. Вам все равно нужно избавиться от старого изображения, хотя сейчас вы делаете два из одного источника и сохраняете оба. – nvoigt

+0

Большое спасибо за ваше объяснение. –