2014-03-06 3 views
1

가능한 한 빠른 방법으로 이미지의 품질을 프로그래밍 방식으로 줄이려고합니다. 현재는 byte[]에서 이미지를 읽을 수 있으며 MemoryStreamBitmap으로, Drawing.Imaging.Encoder.Quality은으로 저장할 때 품질이 변경됩니다.저장하지 않고 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

David가 이처럼 할 수 있습니다.

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); 
관련 문제