C# 降低质量后从函数返回位图图像

C# 降低质量后从函数返回位图图像,c#,bitmapimage,C#,Bitmapimage,我从网上下载这个功能。这将图像的大小减少到50%。 现在我无法返回下面的位图图像表单函数 我无法找到任何方法将当前位图图像恢复到50%并返回它 是否需要创建内存流,然后将其保存在那里? //reduce Image size public void ReduceImageSize(Bitmap bmp1) { var jgpEncoder = GetEncoder(ImageFormat.Jpeg); // Create an Encoder object based on th

我从网上下载这个功能。这将图像的大小减少到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;
}
}

您应该仅将文件保存到内存中,然后从该内存构建新图像:

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);
}

如果我们使用这个函数,如果你经常调用这个函数,是否会出现内存问题。意思可能是每秒一个图像,平均大小为20 t 25 kb?因为每次调用后内存流都是
Dispose
d,所以我看不出有任何问题。不过,你仍然需要摆脱旧图像,现在你从一个源中提取两个并保留两个。非常感谢你的解释。