From 32cdd72192ccaf38ab46c34f2f66b0e1a26a7e71 Mon Sep 17 00:00:00 2001 From: Jonathan Behrens Date: Sun, 19 Dec 2021 18:46:04 -0500 Subject: [PATCH] Optimize decoding of certain RGBA BMP files --- src/codecs/bmp/decoder.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/codecs/bmp/decoder.rs b/src/codecs/bmp/decoder.rs index 1d88af47c6..7bd052100f 100644 --- a/src/codecs/bmp/decoder.rs +++ b/src/codecs/bmp/decoder.rs @@ -48,6 +48,12 @@ const R8_G8_B8_COLOR_MASK: Bitfields = Bitfields { b: Bitfield { len: 8, shift: 8 }, a: Bitfield { len: 0, shift: 0 }, }; +const R8_G8_B8_A8_COLOR_MASK: Bitfields = Bitfields { + r: Bitfield { len: 8, shift: 16 }, + g: Bitfield { len: 8, shift: 8 }, + b: Bitfield { len: 8, shift: 0 }, + a: Bitfield { len: 8, shift: 24 }, +}; const RLE_ESCAPE: u8 = 0; const RLE_ESCAPE_EOL: u8 = 0; @@ -1428,6 +1434,9 @@ impl BmpDecoder { Some(R8_G8_B8_COLOR_MASK) => { self.read_full_byte_pixel_data(&FormatFullBytes::Format888) } + Some(R8_G8_B8_A8_COLOR_MASK) => { + self.read_full_byte_pixel_data(&FormatFullBytes::RGBA32) + } Some(_) => self.read_32_bit_pixel_data(), None => Err(DecoderError::BitfieldMasksMissing(32).into()), },