From a58c7fe322785f507a779d09d51e8e9cc4405bf5 Mon Sep 17 00:00:00 2001 From: Lucas CHOLLET Date: Sun, 2 Jul 2023 00:00:40 -0400 Subject: [PATCH] LibGfx/JPEG: Take the quality as an argument instead of hardcoding it --- Userland/Libraries/LibGfx/ImageFormats/JPEGWriter.cpp | 8 +++----- Userland/Libraries/LibGfx/ImageFormats/JPEGWriter.h | 8 +++++++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Userland/Libraries/LibGfx/ImageFormats/JPEGWriter.cpp b/Userland/Libraries/LibGfx/ImageFormats/JPEGWriter.cpp index a9b5e64d5e1..623e2b8e960 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/JPEGWriter.cpp +++ b/Userland/Libraries/LibGfx/ImageFormats/JPEGWriter.cpp @@ -475,14 +475,12 @@ ErrorOr add_scan_header(Stream& stream) } -ErrorOr JPEGWriter::encode(Stream& stream, Bitmap const& bitmap) +ErrorOr 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; diff --git a/Userland/Libraries/LibGfx/ImageFormats/JPEGWriter.h b/Userland/Libraries/LibGfx/ImageFormats/JPEGWriter.h index 96ea9eee65b..4ab8cc1a4f4 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/JPEGWriter.h +++ b/Userland/Libraries/LibGfx/ImageFormats/JPEGWriter.h @@ -11,9 +11,15 @@ namespace Gfx { +struct JPEGEncoderOptions { + u8 quality { 75 }; +}; + class JPEGWriter { public: - static ErrorOr encode(Stream&, Bitmap const&); + using Options = JPEGEncoderOptions; + + static ErrorOr encode(Stream&, Bitmap const&, Options const& = {}); private: JPEGWriter() = delete;