Anson俊雄 2022-11-14 02:05 采纳率: 33.3%
浏览 9

关于EncoderParameter的参数

我有一个代码,主要功能为压缩图片大小,在压缩原图片字节数为1965915,按以下代码压综后字节数为:566606;

    Dim codecs() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders()
    Dim ici As ImageCodecInfo = Nothing
    Dim codec As ImageCodecInfo
    Dim compressPic As New Bitmap(P)
    Dim ep As EncoderParameters = New EncoderParameters()
    For Each codec In codecs
        If (codec.MimeType = "image/jpeg") Then
            ici = codec
        End If
    Next
    ep.Param(0) = New EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 50)
    P.Save(LJ, ici, ep)
    compressPic.Dispose()
    stmphoto.Dispose() 

请问,EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 50)中的50是怎么计算的,是字节数的50%,还是有其他计算方式,这个问题困惑了我好几天。

  • 写回答

1条回答 默认 最新

  • 桑榆肖物 全栈领域新星创作者 2022-11-14 17:03
    关注

    可以肯定的是,这个不是字节数的50%,具体是如何计算,算法是怎样的需要看这个类库的源码。

    质量类别的有用值范围从 0 到 100。 指定的数字越低,压缩越高,因此图像质量越低。 零会提供最低质量的图像,这里的50只是代表一个刻度值而已,是相较于最高采样率的50%

    源于JPEG的压缩方式主要有四种 ,其中一种是基于空间DPCM的无损压缩,另外三种是基于DCT的有损压缩。

    1. 基于DCT的顺序编码:基于DCT变换原理,按照从上之下,从左至右的顺序对图像数据进行编码压缩。当接收端收到数据后,再按照这个顺序进行解码,在此过程中存在图像丢失,因此是有损压缩;
    2. 基于DCT的累进编码:也是基于DCT变换原理,不过是对图像进行多次扫描,从而对图像进行进一步的数据压缩。所以图像还原时,看到的图像时粗略图,而后逐步细化,直到结束;
    3. 基于DCT的分层编码:以图像分辨率为基准进行编码,从低分辨率开始,逐渐提高分辨率,直到于原图像的分辨率一致。图像的解码也是这样的步骤;
    4. 基于空间DPCM的无损压缩:采用预测法和哈夫曼编码(或算术编码)以保证重建图像与原图像完全相同(设均方误差为零);
    评论

报告相同问题?

问题事件

  • 创建了问题 11月14日

悬赏问题

  • ¥15 基于单片机数字电压表电路组成及框图
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line