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

This commit is contained in:
Lucas CHOLLET 2023-07-02 00:00:40 -04:00 committed by Jelle Raaijmakers
parent 05c8ad4e91
commit a58c7fe322
Notes: sideshowbarker 2024-07-17 18:13:59 +09:00
2 changed files with 10 additions and 6 deletions

View File

@ -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;

View File

@ -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;