Browse Source

Update BmpDecoderCore.cs

pull/3069/head
James Jackson-South 4 months ago
parent
commit
1d87e61a96
  1. 21
      src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs

21
src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs

@ -130,14 +130,8 @@ internal sealed class BmpDecoderCore : ImageDecoderCore
Image<TPixel>? image = null;
try
{
ushort bitsPerPixel = this.infoHeader.BitsPerPixel;
if (bitsPerPixel is not (1 or 2 or 4 or 8 or 16 or 24 or 32))
{
BmpThrowHelper.ThrowInvalidImageContentException($"Invalid bits per pixel: {bitsPerPixel}");
}
int bytesPerColorMapEntry = this.ReadImageHeaders(stream, out bool inverted, out byte[] palette);
ushort bitsPerPixel = this.infoHeader.BitsPerPixel;
image = new Image<TPixel>(this.configuration, this.infoHeader.Width, this.infoHeader.Height, this.metadata);
@ -149,19 +143,23 @@ internal sealed class BmpDecoderCore : ImageDecoderCore
this.ReadRgb32Slow(stream, pixels, this.infoHeader.Width, this.infoHeader.Height, inverted);
break;
case BmpCompression.RGB when bitsPerPixel is 32:
this.ReadRgb32Fast(stream, pixels, this.infoHeader.Width, this.infoHeader.Height, inverted);
break;
case BmpCompression.RGB when bitsPerPixel is 24:
this.ReadRgb24(stream, pixels, this.infoHeader.Width, this.infoHeader.Height, inverted);
break;
case BmpCompression.RGB when bitsPerPixel is 16:
this.ReadRgb16(stream, pixels, this.infoHeader.Width, this.infoHeader.Height, inverted);
break;
case BmpCompression.RGB when bitsPerPixel is <= 8 && this.processedAlphaMask:
case BmpCompression.RGB when bitsPerPixel is > 0 and <= 8 && this.processedAlphaMask:
this.ReadRgbPaletteWithAlphaMask(
stream,
pixels,
@ -173,7 +171,8 @@ internal sealed class BmpDecoderCore : ImageDecoderCore
inverted);
break;
case BmpCompression.RGB when bitsPerPixel is <= 8:
case BmpCompression.RGB when bitsPerPixel is > 0 and <= 8:
this.ReadRgbPalette(
stream,
pixels,
@ -186,6 +185,10 @@ internal sealed class BmpDecoderCore : ImageDecoderCore
break;
case BmpCompression.RGB when bitsPerPixel is <= 0 or > 32:
BmpThrowHelper.ThrowInvalidImageContentException($"Invalid bits per pixel: {bitsPerPixel}");
break;
case BmpCompression.RLE24:
this.ReadRle24(stream, pixels, this.infoHeader.Width, this.infoHeader.Height, inverted);

Loading…
Cancel
Save