浏览代码

LibGfx/JPEG: Take the quality as an argument instead of hardcoding it

Lucas CHOLLET 2 年之前
父节点
当前提交
a58c7fe322

+ 3 - 5
Userland/Libraries/LibGfx/ImageFormats/JPEGWriter.cpp

@@ -475,14 +475,12 @@ ErrorOr<void> add_scan_header(Stream& stream)
 
 }
 
-ErrorOr<void> JPEGWriter::encode(Stream& stream, Bitmap const& bitmap)
+ErrorOr<void> JPEGWriter::encode(Stream& stream, Bitmap const& bitmap, Options const& options)
 {
     JPEGEncodingContext context { JPEGBigEndianOutputBitStream { stream } };
 
-    // FIXME: Let's take the quality as an option instead of hardcoding it
-    //        (there might also be a bug with quantization tables :^)).
-    context.set_luminance_quantization_table(s_default_luminance_quantization_table, 100);
-    context.set_chrominance_quantization_table(s_default_chrominance_quantization_table, 100);
+    context.set_luminance_quantization_table(s_default_luminance_quantization_table, options.quality);
+    context.set_chrominance_quantization_table(s_default_chrominance_quantization_table, options.quality);
 
     context.dc_luminance_huffman_table = s_default_dc_luminance_huffman_table;
     context.dc_chrominance_huffman_table = s_default_dc_chrominance_huffman_table;

+ 7 - 1
Userland/Libraries/LibGfx/ImageFormats/JPEGWriter.h

@@ -11,9 +11,15 @@
 
 namespace Gfx {
 
+struct JPEGEncoderOptions {
+    u8 quality { 75 };
+};
+
 class JPEGWriter {
 public:
-    static ErrorOr<void> encode(Stream&, Bitmap const&);
+    using Options = JPEGEncoderOptions;
+
+    static ErrorOr<void> encode(Stream&, Bitmap const&, Options const& = {});
 
 private:
     JPEGWriter() = delete;