LibGfx/JPEGXL: Honor the orientation parameter

Since the introduction of the JPEG XL decoder, we always read the
`orientation` field in the `ImageMetadata` bundle. This patch allows us
to render the bitmap accordingly to this transformation.
This commit is contained in:
Lucas CHOLLET 2023-07-31 23:20:31 -04:00 committed by Sam Atkins
parent 3c1be9879f
commit a35f4bf14e
Notes: sideshowbarker 2024-07-17 03:05:16 +09:00

View file

@ -9,6 +9,7 @@
#include <AK/FixedArray.h>
#include <AK/String.h>
#include <LibCompress/Brotli.h>
#include <LibGfx/ImageFormats/ExifOrientedBitmap.h>
#include <LibGfx/ImageFormats/JPEGXLLoader.h>
namespace Gfx {
@ -1582,7 +1583,8 @@ public:
auto const width = m_channels[0].width();
auto const height = m_channels[0].height();
auto bitmap = TRY(Bitmap::create(BitmapFormat::BGRA8888, { width, height }));
auto const orientation = static_cast<ExifOrientedBitmap::Orientation>(metadata.orientation);
auto oriented_bitmap = TRY(ExifOrientedBitmap::create(BitmapFormat::BGRA8888, { width, height }, orientation));
auto const alpha_channel = metadata.alpha_channel();
@ -1613,11 +1615,11 @@ public:
to_u8(m_channels[*alpha_channel].get(x, y)),
};
}();
bitmap->set_pixel(x, y, color);
oriented_bitmap.set_pixel(x, y, color);
}
}
return bitmap;
return oriented_bitmap.bitmap();
}
Vector<Channel>& channels()