2010-02-15 65 views
7
<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 

這不起作用。它沒有保存爲漸進式。我怎麼做到這一點,也許還指定了通行證的數量。保存爲漸進格式的JPG

回答

5

據我所知,它不被支持。我曾嘗試代碼建議herehere,來到了這個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。

參數值ScanMethodInterlacedRenderProgressive僅被描述爲「在GDI +版本1.0中未使用」。在 the documentation

+5

@diamandiev爲什麼這標誌着作爲答案?這並沒有給出如何以漸進格式保存的任何答案 - 只是說它不能。這對讀者來說可能會產生誤導。 – 2013-11-05 11:29:04

+0

@Guffa做更新版本的GDI +支持漸進式jpeg。如果是這樣,它支持哪個版本。 – 2014-05-29 07:53:22

+0

@ArjunVachhani:我還沒有發現任何暗示它已被添加的東西。 – Guffa 2014-05-29 12:57:08