2010-02-15 32 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 

tính năng này không hoạt động. Nó không được lưu như tiến bộ. Làm thế nào tôi có thể làm điều này, và cũng có thể chỉ định nr của pass. ??Lưu JPG ở định dạng tiến bộ

Trả lời

5

Theo như tôi có thể biết, nó không được hỗ trợ. Tôi đã thử mã đề nghị herehere và đến mã này # 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); 
} 

Thiết cả chế độ xen kẽ và tiến bộ, nó vẫn tiết kiệm một cơ sở thường xuyên JPEG. Tôi đã thử bất kỳ sự kết hợp của một trong hai thiết lập và các thiết lập thay thế của họ (không xen kẽ và không tiến bộ), và đã không thấy bất kỳ sự khác biệt ở tất cả trong tập tin hình ảnh kết quả.

Tôi chưa tìm thấy bất kỳ phản hồi nào từ bất kỳ ai nói rằng họ đã thực sự quản lý để lưu một JPEG tiến bộ trong .NET.

Cả hai giá trị tham số ScanMethodInterlacedRenderProgressive chỉ được mô tả là "Không được sử dụng trong GDI + phiên bản 1.0". trong the documentation.

+5

@diamandiev Tại sao điều này đánh dấu là một câu trả lời? Điều này không đưa ra bất kỳ câu trả lời nào về cách lưu ở định dạng tiến bộ - Chỉ cần nó nói rằng bạn không thể. Nó có thể khá gây hiểu lầm cho độc giả. –

+0

@Guffa làm phiên bản mới hơn của GDI + hỗ trợ jpeg tiến bộ. nếu có, từ phiên bản nào nó được hỗ trợ. –

+0

@ArjunVachhani: Tôi chưa tìm thấy bất kỳ điều gì gợi ý rằng nó đã được thêm vào. – Guffa

3

Tôi cho rằng để sử dụng jpegtran tiện ích như mô tả trong bài viết Image Optimization, Part 4: Progressive JPEG…Hot or Not?:

jpegtran -copy none -progressive input.jpg output.jpg 

Bên cạnh đó bạn có thể tối ưu hóa bảng Haffman bằng cách như vậy:

jpegtran -copy none -optimize input.jpg output.jpg 
Các vấn đề liên quan