diff --git a/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs b/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs index 270dfb22b6..dd3b6a8218 100644 --- a/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs +++ b/src/ImageSharp/Formats/Tga/TgaDecoderCore.cs @@ -436,7 +436,15 @@ namespace SixLabors.ImageSharp.Formats.Tga this.buffer[1] |= 1 << 7; } - color.FromBgra5551(Unsafe.As(ref this.buffer[0])); + if (this.fileHeader.ImageType == TgaImageType.BlackAndWhite) + { + color.FromLa16(Unsafe.As(ref this.buffer[0])); + } + else + { + color.FromBgra5551(Unsafe.As(ref this.buffer[0])); + } + int newX = InvertX(x, width, origin); pixelSpan[newX] = color; } @@ -451,11 +459,18 @@ namespace SixLabors.ImageSharp.Formats.Tga // We need to set the alpha component value to fully opaque. for (int x = 1; x < rowSpan.Length; x += 2) { - rowSpan[x] |= (1 << 7); + rowSpan[x] |= 1 << 7; } } - PixelOperations.Instance.FromBgra5551Bytes(this.configuration, rowSpan, pixelSpan, width); + if (this.fileHeader.ImageType == TgaImageType.BlackAndWhite) + { + PixelOperations.Instance.FromLa16Bytes(this.configuration, rowSpan, pixelSpan, width); + } + else + { + PixelOperations.Instance.FromBgra5551Bytes(this.configuration, rowSpan, pixelSpan, width); + } } } } @@ -612,7 +627,15 @@ namespace SixLabors.ImageSharp.Formats.Tga bufferSpan[idx + 1] = (byte)(bufferSpan[idx + 1] | 128); } - color.FromBgra5551(Unsafe.As(ref bufferSpan[idx])); + if (this.fileHeader.ImageType == TgaImageType.RleBlackAndWhite) + { + color.FromLa16(Unsafe.As(ref bufferSpan[idx])); + } + else + { + color.FromBgra5551(Unsafe.As(ref bufferSpan[idx])); + } + break; case 3: color.FromBgr24(Unsafe.As(ref bufferSpan[idx]));