以渐进式格式保存JPG图片

8
<Extension()> _
Public Sub Save(ByVal b As Bitmap, ByVal FileName As String, ByVal Compression As Long, ByVal MimeType As String)
    Dim Params As EncoderParameters = New EncoderParameters(2)
    Dim CodecInfo As ImageCodecInfo = GetEncoderInfo(MimeType)

    Params.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderProgressive)
    Params.Param(1) = New EncoderParameter(Encoder.Quality, Compression)

    b.Save(FileName, CodecInfo, Params)
End Sub

这不起作用。它没有保存为逐步式。我该怎么做,也许还要指定通过次数?

2个回答

8
据我所知,它不被支持。我尝试了建议的代码这里这里,得到了以下C#代码:
using (Image source = Image.FromFile(@"D:\temp\test2.jpg")) {

  ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders().First(c => c.MimeType == "image/jpeg");

  EncoderParameters parameters = new EncoderParameters(3);
  parameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
  parameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.ScanMethod, (int)EncoderValue.ScanMethodInterlaced);
  parameters.Param[2] = new EncoderParameter(System.Drawing.Imaging.Encoder.RenderMethod, (int)EncoderValue.RenderProgressive);

  source.Save(@"D:\temp\saved.jpg", codec, parameters);
}

即使同时设置隔行和逐行扫描模式,它仍然保存一个常规的基准JPEG图像。我已经尝试了任何一种设置及其备选设置(非隔行和非逐行),但在生成的图像文件中没有看到任何区别。
我还没有找到任何回应,说他们实际上已经成功保存了.NET中的逐行扫描JPEG图像。
在文档中,ScanMethodInterlaced和RenderProgressive参数值都仅被描述为“在GDI+版本1.0中未使用”。

5
为什么这个回答被标记为答案?它并没有提供任何如何保存渐进式格式的答案,只是说你无法这样做。对读者来说可能会产生误导。 - Karl Cassar
@Guffa,新版本的GDI+是否支持渐进式JPEG?如果是,从哪个版本开始支持? - Arjun Vachhani
@ArjunVachhani:我没有找到任何证据表明它已经被添加了。 - Guffa
从位图创建JPEG时出现问题,有解决方案吗? - Ahmad

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接