Skip to content

Commit bc44203

Browse files
InvalidUsernameExceptiongmta
authored andcommitted
LibGfx+Tests: Load bmp files with unpremultiplied alpha
From what I can tell BMP files with an alpha channel always store unpremultiplied alpha. So let's load them as such to avoid rendering artifacts from using the wrong alpha type.
1 parent 949053c commit bc44203

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

Libraries/LibGfx/ImageFormats/BMPLoader.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1298,7 +1298,7 @@ static ErrorOr<void> decode_bmp_pixel_data(BMPLoadingContext& context)
12981298
u32 const width = abs(context.dib.core.width);
12991299
u32 const height = !context.is_included_in_ico ? abs(context.dib.core.height) : (abs(context.dib.core.height) / 2);
13001300

1301-
context.bitmap = TRY(Bitmap::create(format, { static_cast<int>(width), static_cast<int>(height) }));
1301+
context.bitmap = TRY(Bitmap::create(format, Gfx::AlphaType::Unpremultiplied, { static_cast<int>(width), static_cast<int>(height) }));
13021302

13031303
ByteBuffer rle_buffer;
13041304
ReadonlyBytes bytes { context.file_bytes + context.data_offset, context.file_size - context.data_offset };
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!DOCTYPE html>
2+
<style>
3+
body {
4+
color: white;
5+
background-color: black;
6+
}
7+
</style>
8+
<p>All three images should render the same</p>
9+
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAS1BMVEUAAAAAgAAAqgAA+QAA/QAA/QAA/QAA/QAA/QAA/QAA/QAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/wDNmTtpAAAAGHRSTlMAAQIkXF11d3h6foCBiImXnZ7Iy87S3d5CsE4PAAAAZ0lEQVQY02VPwRaAIAijSMvSsrLa/39pil6KPQ5s8MYgEvDzMDV0w9CRA1ztiAwQ+wVY+giYKiB6wGcuQhkgSeVVMdnQsBfOdpyOys9ptEw3Pri1wHMIqZJrDTNrU31WBVPR1XO/918rbA2ED1iblwAAAABJRU5ErkJggg==">
10+
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAS1BMVEUAAAAAgAAAqgAA+QAA/QAA/QAA/QAA/QAA/QAA/QAA/QAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/wDNmTtpAAAAGHRSTlMAAQIkXF11d3h6foCBiImXnZ7Iy87S3d5CsE4PAAAAZ0lEQVQY02VPwRaAIAijSMvSsrLa/39pil6KPQ5s8MYgEvDzMDV0w9CRA1ztiAwQ+wVY+giYKiB6wGcuQhkgSeVVMdnQsBfOdpyOys9ptEw3Pri1wHMIqZJrDTNrU31WBVPR1XO/918rbA2ED1iblwAAAABJRU5ErkJggg==">
11+
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAS1BMVEUAAAAAgAAAqgAA+QAA/QAA/QAA/QAA/QAA/QAA/QAA/QAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/wDNmTtpAAAAGHRSTlMAAQIkXF11d3h6foCBiImXnZ7Iy87S3d5CsE4PAAAAZ0lEQVQY02VPwRaAIAijSMvSsrLa/39pil6KPQ5s8MYgEvDzMDV0w9CRA1ztiAwQ+wVY+giYKiB6wGcuQhkgSeVVMdnQsBfOdpyOys9ptEw3Pri1wHMIqZJrDTNrU31WBVPR1XO/918rbA2ED1iblwAAAABJRU5ErkJggg==">
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!DOCTYPE html>
2+
<link rel="match" href="../expected/bmp-load-as-unpremultiplied-alpha-ref.html" />
3+
<style>
4+
body {
5+
color: white;
6+
background-color: black;
7+
}
8+
</style>
9+
<p>All three images should render the same</p>
10+
<img src="data:image/vnd.microsoft.icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+QAkAP4A3gD+AN4A+QAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAEA/QBcAP0AXACAAAEAAAAAAP0AegD/AP8A/wD/AP0AegAAAAAAgAABAP0AXAD9AFwAgAABAAAAAAAAAAAA/QBdAP8A/wD/AP8A/gCdAKoAAgD+AIAA/wD/AP8A/wD+AIAAqgACAP4AnQD/AP8A/wD/AP0AXQAAAAAAAAAAAP0AXQD/AP8A/wD/AP8A/wD+AJ0A/gCBAP8A/wD/AP8A/gCBAP4AnQD/AP8A/wD/AP8A/wD9AF0AAAAAAAAAAACqAAIA/gCdAP8A/wD/AP8A/wD/AP4AzgD/AP8A/wD/AP4AzgD/AP8A/wD/AP8A/wD+AJ0AqgACAAAAAAAAAAAAAAAAAIAAAQD+AJcA/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AJ4AqgACAAAAAAAAAAAA+QAkAP0AfgD+AIgA/gCIAP4AzgD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+ANIA/gCJAP4AiAD9AH4A+QAkAP4A3QD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP4A3QD+AN0A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AN0A+QAkAP0AdQD9AHcA/QB4AP4AyAD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AMsA/QB4AP0AdwD9AHUA+QAkAAAAAAAAAAAAgAABAP4AlwD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP4AngCqAAIAAAAAAAAAAAAAAAAAqgACAP4AnQD/AP8A/wD/AP8A/wD+AM4A/wD/AP8A/wD+AM4A/wD/AP8A/wD/AP8A/gCdAKoAAgAAAAAAAAAAAP0AXQD/AP8A/wD/AP8A/wD+AJ0A/gCBAP8A/wD/AP8A/gCBAP4AnQD/AP8A/wD/AP8A/wD9AF0AAAAAAAAAAAD9AF0A/wD/AP8A/wD+AJ0AqgACAP4AgAD/AP8A/wD/AP4AgACqAAIA/gCdAP8A/wD/AP8A/QBdAAAAAAAAAAAAgAABAP0AXAD9AFwAgAABAAAAAAD9AHoA/wD/AP8A/wD9AHoAAAAAAIAAAQD9AFwA/QBcAIAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+QAkAP4A3gD+AN4A+QAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/D8AAIQhAACAAQAAgAEAAIABAADAAwAAAAAAAAAAAAAAAAAAAAAAAMADAACAAQAAgAEAAIABAACEIQAA/D8AAA==">
11+
<img src="data:image/bmp;base64,Qk2KBAAAAAAAAIoAAAB8AAAAEAAAABAAAAABACAAAwAAAAAEAAAjLgAAIy4AAAAAAAAAAAAAAAD/AAD/AAD/AAAAAAAA/0JHUnMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPkAJAD+AN4A/gDeAPkAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAABAP0AXAD9AFwAgAABAAAAAAD9AHoA/wD/AP8A/wD9AHoAAAAAAIAAAQD9AFwA/QBcAIAAAQAAAAAAAAAAAP0AXQD/AP8A/wD/AP4AnQCqAAIA/gCAAP8A/wD/AP8A/gCAAKoAAgD+AJ0A/wD/AP8A/wD9AF0AAAAAAAAAAAD9AF0A/wD/AP8A/wD/AP8A/gCdAP4AgQD/AP8A/wD/AP4AgQD+AJ0A/wD/AP8A/wD/AP8A/QBdAAAAAAAAAAAAqgACAP4AnQD/AP8A/wD/AP8A/wD+AM4A/wD/AP8A/wD+AM4A/wD/AP8A/wD/AP8A/gCdAKoAAgAAAAAAAAAAAAAAAACAAAEA/gCXAP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/gCeAKoAAgAAAAAAAAAAAPkAJAD9AH4A/gCIAP4AiAD+AM4A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/gDSAP4AiQD+AIgA/QB+APkAJAD+AN0A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AN0A/gDdAP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/gDdAPkAJAD9AHUA/QB3AP0AeAD+AMgA/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/gDLAP0AeAD9AHcA/QB1APkAJAAAAAAAAAAAAIAAAQD+AJcA/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD+AJ4AqgACAAAAAAAAAAAAAAAAAKoAAgD+AJ0A/wD/AP8A/wD/AP8A/gDOAP8A/wD/AP8A/gDOAP8A/wD/AP8A/wD/AP4AnQCqAAIAAAAAAAAAAAD9AF0A/wD/AP8A/wD/AP8A/gCdAP4AgQD/AP8A/wD/AP4AgQD+AJ0A/wD/AP8A/wD/AP8A/QBdAAAAAAAAAAAA/QBdAP8A/wD/AP8A/gCdAKoAAgD+AIAA/wD/AP8A/wD+AIAAqgACAP4AnQD/AP8A/wD/AP0AXQAAAAAAAAAAAIAAAQD9AFwA/QBcAIAAAQAAAAAA/QB6AP8A/wD/AP8A/QB6AAAAAACAAAEA/QBcAP0AXACAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPkAJAD+AN4A/gDeAPkAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==">
12+
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAS1BMVEUAAAAAgAAAqgAA+QAA/QAA/QAA/QAA/QAA/QAA/QAA/QAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/gAA/wDNmTtpAAAAGHRSTlMAAQIkXF11d3h6foCBiImXnZ7Iy87S3d5CsE4PAAAAZ0lEQVQY02VPwRaAIAijSMvSsrLa/39pil6KPQ5s8MYgEvDzMDV0w9CRA1ztiAwQ+wVY+giYKiB6wGcuQhkgSeVVMdnQsBfOdpyOys9ptEw3Pri1wHMIqZJrDTNrU31WBVPR1XO/918rbA2ED1iblwAAAABJRU5ErkJggg==">

0 commit comments

Comments
 (0)