在通过网络发送之前压缩位图

时间:2010-06-13 22:37:50

标签: c# bitmap compression

我正在尝试通过网络发送位图截图,因此我需要在发送之前对其进行压缩。有这样的库或方法吗?

4 个答案:

答案 0 :(得分:3)

将图像保存到流时, 选择格式。几乎所有位图格式(bmp,gif,jpg,png)都使用一种或多种形式的压缩。因此,只需选择适当的格式,并确保发件人和收件人就此达成一致。

答案 1 :(得分:1)

尝试System.IO.DeflateStream课程。

答案 2 :(得分:1)

如果您正在寻找能够压缩图像质量的东西,请点击这里 -

    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);
        }
    }

使用它 -

var compressedBmp = GetCompressedBitmap(myBmp, 60L);

答案 3 :(得分:0)

may be can use 



private Bitmap compressImage(Bitmap image) {

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 
        int options = 100;
        while ( baos.toByteArray().length / 1024>100) { // 
            baos.reset();
            image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 
            options -= 10;// 10
        }
        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 
        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);// 
        return bitmap;
    }