2014-03-06 211 views
1

我试图以尽可能最快的方式以编程方式降低图像质量。现在,我可以从byte[]中读取图像,然后将其作为MemoryStream读取到Bitmap,并通过Drawing.Imaging.Encoder.Quality在保存到所需的20L时更改其质量。在不保存的情况下降低JPEG图像质量

我想知道是否有办法做到这一点,而不保存整个图像。有没有办法改变位图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

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

3

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

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