我试图以最快的方式以编程方式降低图像的质量。现在,我可以从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);
}
答案 0 :(得分:6)
而不是将bmp1
保存到文件中。您可以将其保存到另一个MemoryStream
。然后,您可以从此MemoryStream
加载新的位图。
答案 1 :(得分: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);