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

Image Quality Setting Not working in PNG and BMP Format Output

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

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 Images.But 的情况下工作正常,当我将 .bmp 和 .png 格式的质量设置为 20 和 100 时,我得到与输出大小相同的文件。 这里出了什么问题? 请指教。

"What is going wrong here?"

这里没有任何问题。质量设置仅适用于 JPEG 编码器。 PNG 和 BMP 都是无损的,这意味着无需 quality/space 权衡。您总是会从这些格式中获得与输入时完全相同的像素。

不幸的是,.NET 在其任何图像处理 API 中都没有为这些格式提供太多压缩选项。 BMP 确实支持 "run-length encoding" 格式,但据我所知,没有 .NET API 会实际生成它。同样 PNG,它实际上有更多的选项可供选择,以根据输入图像的性质和压缩文件所需的时间来定制压缩。

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