C# 在不保存图像的情况下降低JPEG图像质量

C# 在不保存图像的情况下降低JPEG图像质量,c#,winforms,image,bitmap,image-quality,C#,Winforms,Image,Bitmap,Image Quality,我试图通过编程以最快的方式降低图像的质量。现在,我能够从字节[]读取图像,然后作为内存流将其读取到位图,并通过Drawing.Imaging.Encoder.Quality在保存到所需的20L时更改其质量 我想知道是否有一种方法可以做到这一点而不保存整个图像。有没有办法改变位图bmp1,或者创建一个新的位图,这样会降低图像质量 byte[] imageBytes = convertImageToByteArray(bmpScreenshot); MemoryStream mem = new Me

我试图通过编程以最快的方式降低图像的质量。现在,我能够从字节[]读取图像,然后作为内存流将其读取到位图,并通过Drawing.Imaging.Encoder.Quality在保存到所需的20L时更改其质量

我想知道是否有一种方法可以做到这一点而不保存整个图像。有没有办法改变位图bmp1,或者创建一个新的位图,这样会降低图像质量

byte[] imageBytes = convertImageToByteArray(bmpScreenshot);
MemoryStream mem = new MemoryStream(imageBytes);
using (Bitmap bmp1 = (Bitmap)Image.FromStream(mem))
{

     ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
     ImageCodecInfo jgpEncoder = codecs[1];

     System.Drawing.Imaging.Encoder myEncoder =
     System.Drawing.Imaging.Encoder.Quality;

     myEncoderParameter = new EncoderParameter(myEncoder, 20L);
     myEncoderParameters.Param[0] = myEncoderParameter;
     bmp1.Save(@"C:\TestPhotoQuality20L.jpg", jgpEncoder, myEncoderParameters);
}

而不是将bmp1保存到文件中。您可以将其保存到另一个MemoryStream。然后您可以从此内存流加载新位图。

而不是将bmp1保存到文件中。您可以将其保存到另一个MemoryStream。然后,您可以从此内存流加载新位图。

大卫说得对,您可以这样做

EncoderParameters myEncoderParameters = new EncoderParameters(1);
myEncoderParameters.Param[0] = new EncoderParameter(myEncoder, 20L);
MemoryStream ms = new MemoryStream();
bmp1.Save(ms, format);
Image imgImage = Image.FromStream(ms);

大卫是对的,你可以这样做

EncoderParameters myEncoderParameters = new EncoderParameters(1);
myEncoderParameters.Param[0] = new EncoderParameter(myEncoder, 20L);
MemoryStream ms = new MemoryStream();
bmp1.Save(ms, format);
Image imgImage = Image.FromStream(ms);