图像质量设置在PNG和BMP格式输出中不起作用

时间:2018-01-09 07:16:59

标签: c# .net graphics system.drawing

我使用以下代码以不同的格式保存图像

public void saveJpeg(string path, Bitmap img, long quality)
    {


        System.Drawing.Imaging.EncoderParameter qualityParam = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);


        System.Drawing.Imaging.ImageCodecInfo Codec = this.getEncoderInfo(imgformat);

        if (Codec == null)
            return;

        System.Drawing.Imaging.EncoderParameters encoderParams = new System.Drawing.Imaging.EncoderParameters(1);
        encoderParams.Param[0] = qualityParam;

        img.Save(path + ext, Codec, encoderParams);
    }

质量设置在JPEG图像的情况下工作正常。但是当我为.bmp和.png格式设置质量为20和100时,我得到的文件大小与输出相同。 这里出了什么问题? 请指教。

1 个答案:

答案 0 :(得分:1)

  

“这里出了什么问题?”

这里没有什么问题。质量设置仅适用于JPEG编码器。 PNG和BMP都是无损的,这意味着不需要进行质量/空间权衡。您将始终从这些格式中获得完全相同的像素。

不幸的是,.NET在任何图像处理API中都没有为这些格式提供压缩选项。 BMP确实支持“游程编码”格式,但据我所知,没有实际生成它的.NET API。同样是PNG,它实际上有很多选项可供选择,以根据输入图像的性质和压缩文件所需的时间量来定制压缩。

但即使您有权访问这些选项,它们也不会影响图像的质量。只是文件的最终压缩大小(例如,对于使用正确压缩算法的PNG和/或花费更多时间压缩文件将导致文件较小,但仍然是与您开始使用的图像完全相同的文件)。