Reputation: 389
I'm trying to make an console application in .net core 3, this application can successfully get a bitmap from the computer and send it to another computer. But now I want to lower the quality of the image and send it as a JPEG file.
I have looked on the internet but I'm unable to get it to work. My latest attempt I tried to use the following MSDN website. But with this approach I get stuck at ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
since my application cannot find GetEncoder
. I have found GetEncoder
in System.Text.Encoding.Getencoding
but here getEncoder
doesn't take any parameters.
So my question is which namespace do I have to use or is there another way to lower the quality of an JPEG image?
Upvotes: 0
Views: 731
Reputation: 706
Here is my functions to compress image as jpeg
public static System.Drawing.Imaging.ImageCodecInfo GetEncoder(System.Drawing.Imaging.ImageFormat format)
{
System.Drawing.Imaging.ImageCodecInfo[] codecs = System.Drawing.Imaging.ImageCodecInfo.GetImageDecoders();
foreach (System.Drawing.Imaging.ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
public static byte[] GetCompressedImage(System.Drawing.Image img, long quality)
{
System.Drawing.Imaging.ImageCodecInfo ici = GetEncoder(System.Drawing.Imaging.ImageFormat.Jpeg);
System.Drawing.Imaging.EncoderParameters eps = new System.Drawing.Imaging.EncoderParameters(2);
eps.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
eps.Param[1] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)System.Drawing.Imaging.EncoderValue.CompressionLZW);
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, ici, eps);
return ms.ToArray();
}
}
Upvotes: 1