Compress bitmap before sending over network

11,260

Solution 1

When you save an Image to a stream, you have to select a format. Almost all bitmap formats (bmp, gif, jpg, png) use 1 or more forms of compression. So just select an appropriate format, and make make sure that sender and receiver agree on it.

Solution 2

If you are looking for something to compress the image in quality, here it is-

    private Image GetCompressedBitmap(Bitmap bmp, long quality)
    {
        using (var mss = new MemoryStream())
        {
            EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
            ImageCodecInfo imageCodec = ImageCodecInfo.GetImageEncoders().FirstOrDefault(o => o.FormatID == ImageFormat.Jpeg.Guid);
            EncoderParameters parameters = new EncoderParameters(1);
            parameters.Param[0] = qualityParam;
            bmp.Save(mss, imageCodec, parameters);
            return Image.FromStream(mss);
        }
    }

Use it -

var compressedBmp = GetCompressedBitmap(myBmp, 60L);

Solution 3

Try the System.IO.DeflateStream class.

Share:
11,260
seddik
Author by

seddik

Updated on June 04, 2022

Comments

  • seddik
    seddik almost 2 years

    I'm trying to send a bitmap screenshot over network, so I need to compress it before sending it. Is there a library or method for doing this?