1

我正在尝试以最快的方式以编程方式降低图像的质量。现在,我可以从 读取图像byte[],然后MemoryStream读取它Bitmap并在保存到所需时通过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);
}
4

2 回答 2

6

而不是保存bmp1到文件。您可以将其保存到另一个MemoryStream. 然后你可以从这里加载一个新的位图MemoryStream

于 2014-03-06T20:28:21.833 回答
4

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

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);
于 2014-03-07T05:29:58.927 回答