diff --git a/Userland/Libraries/LibGfx/BMPWriter.cpp b/Userland/Libraries/LibGfx/BMPWriter.cpp index 94f6f7802c..cd763dbc58 100644 --- a/Userland/Libraries/LibGfx/BMPWriter.cpp +++ b/Userland/Libraries/LibGfx/BMPWriter.cpp @@ -91,6 +91,7 @@ ErrorOr BMPWriter::dump(Bitmap const& bitmap, Options options) break; case Options::DibHeader::V3: case Options::DibHeader::V4: + case Options::DibHeader::V5: m_compression = Compression::BI_BITFIELDS; m_bytes_per_pixel = 4; m_include_alpha_channel = true; @@ -126,14 +127,14 @@ ErrorOr BMPWriter::dump(Bitmap const& bitmap, Options options) streamer.write_u32(0); // TotalColors streamer.write_u32(0); // ImportantColors - if (dib_header == Options::DibHeader::V3 || dib_header == Options::DibHeader::V4) { + if (dib_header >= Options::DibHeader::V3) { streamer.write_u32(0x00ff0000); // Red bitmask streamer.write_u32(0x0000ff00); // Green bitmask streamer.write_u32(0x000000ff); // Blue bitmask streamer.write_u32(0xff000000); // Alpha bitmask } - if (dib_header == Options::DibHeader::V4) { + if (dib_header >= Options::DibHeader::V4) { streamer.write_u32(0); // Colorspace for (int i = 0; i < 12; i++) { @@ -141,6 +142,13 @@ ErrorOr BMPWriter::dump(Bitmap const& bitmap, Options options) } } + if (dib_header >= Options::DibHeader::V5) { + streamer.write_u32(4); // Rendering intent IMAGES / Perceptual. + streamer.write_u32(0); // Profile data + streamer.write_u32(0); // Profile size + streamer.write_u32(0); // Reserved + } + TRY(buffer.try_append(pixel_data.data(), pixel_data.size())); return buffer; } diff --git a/Userland/Libraries/LibGfx/BMPWriter.h b/Userland/Libraries/LibGfx/BMPWriter.h index 76f93f54d6..ca669e1263 100644 --- a/Userland/Libraries/LibGfx/BMPWriter.h +++ b/Userland/Libraries/LibGfx/BMPWriter.h @@ -18,8 +18,9 @@ struct BMPWriterOptions { Info = 40, V3 = 56, V4 = 108, + V5 = 124, }; - DibHeader dib_header = DibHeader::V4; + DibHeader dib_header = DibHeader::V5; }; class BMPWriter {