2014-03-06 263 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);