Browse Source

Resolved findings in PR

af/merge-core
Devedse 7 years ago
parent
commit
1b5b85572b
  1. 24
      src/ImageSharp/Formats/Png/PngDecoderCore.cs
  2. 24
      src/ImageSharp/Formats/Png/PngEncoderCore.cs
  3. 8
      src/ImageSharp/Formats/Png/PngMetaData.cs
  4. 16
      src/ImageSharp/Formats/Png/PngScanlineProcessor.cs

24
src/ImageSharp/Formats/Png/PngDecoderCore.cs

@ -656,8 +656,8 @@ namespace SixLabors.ImageSharp.Formats.Png
scanlineSpan,
rowSpan,
pngMetaData.HasTrans,
pngMetaData.Luminance16Trans.GetValueOrDefault(),
pngMetaData.LuminanceTrans.GetValueOrDefault());
pngMetaData.TransparentGray16.GetValueOrDefault(),
pngMetaData.TransparentGray8.GetValueOrDefault());
break;
@ -690,8 +690,8 @@ namespace SixLabors.ImageSharp.Formats.Png
this.bytesPerPixel,
this.bytesPerSample,
pngMetaData.HasTrans,
pngMetaData.Rgb48Trans.GetValueOrDefault(),
pngMetaData.Rgb24Trans.GetValueOrDefault());
pngMetaData.TransparentRgb48.GetValueOrDefault(),
pngMetaData.TransparentRgb24.GetValueOrDefault());
break;
@ -740,8 +740,8 @@ namespace SixLabors.ImageSharp.Formats.Png
pixelOffset,
increment,
pngMetaData.HasTrans,
pngMetaData.Luminance16Trans.GetValueOrDefault(),
pngMetaData.LuminanceTrans.GetValueOrDefault());
pngMetaData.TransparentGray16.GetValueOrDefault(),
pngMetaData.TransparentGray8.GetValueOrDefault());
break;
@ -779,8 +779,8 @@ namespace SixLabors.ImageSharp.Formats.Png
this.bytesPerPixel,
this.bytesPerSample,
pngMetaData.HasTrans,
pngMetaData.Rgb48Trans.GetValueOrDefault(),
pngMetaData.Rgb24Trans.GetValueOrDefault());
pngMetaData.TransparentRgb48.GetValueOrDefault(),
pngMetaData.TransparentRgb24.GetValueOrDefault());
break;
@ -817,7 +817,7 @@ namespace SixLabors.ImageSharp.Formats.Png
ushort gc = BinaryPrimitives.ReadUInt16LittleEndian(alpha.Slice(2, 2));
ushort bc = BinaryPrimitives.ReadUInt16LittleEndian(alpha.Slice(4, 2));
pngMetaData.Rgb48Trans = new Rgb48(rc, gc, bc);
pngMetaData.TransparentRgb48 = new Rgb48(rc, gc, bc);
pngMetaData.HasTrans = true;
return;
}
@ -825,7 +825,7 @@ namespace SixLabors.ImageSharp.Formats.Png
byte r = ReadByteLittleEndian(alpha, 0);
byte g = ReadByteLittleEndian(alpha, 2);
byte b = ReadByteLittleEndian(alpha, 4);
pngMetaData.Rgb24Trans = new Rgb24(r, g, b);
pngMetaData.TransparentRgb24 = new Rgb24(r, g, b);
pngMetaData.HasTrans = true;
}
}
@ -835,11 +835,11 @@ namespace SixLabors.ImageSharp.Formats.Png
{
if (this.header.BitDepth == 16)
{
pngMetaData.Luminance16Trans = BinaryPrimitives.ReadUInt16LittleEndian(alpha.Slice(0, 2));
pngMetaData.TransparentGray16 = new Gray16(BinaryPrimitives.ReadUInt16LittleEndian(alpha.Slice(0, 2)));
}
else
{
pngMetaData.LuminanceTrans = ReadByteLittleEndian(alpha, 0);
pngMetaData.TransparentGray8 = new Gray8(ReadByteLittleEndian(alpha, 0));
}
pngMetaData.HasTrans = true;

24
src/ImageSharp/Formats/Png/PngEncoderCore.cs

@ -314,37 +314,37 @@ namespace SixLabors.ImageSharp.Formats.Png
{
if (pngMetaData.ColorType == PngColorType.Rgb)
{
if (pngMetaData.Rgb48Trans != null)
if (pngMetaData.TransparentRgb48 != null)
{
var r = BitConverter.GetBytes(pngMetaData.Rgb48Trans.Value.R);
var g = BitConverter.GetBytes(pngMetaData.Rgb48Trans.Value.R);
var b = BitConverter.GetBytes(pngMetaData.Rgb48Trans.Value.B);
var r = BitConverter.GetBytes(pngMetaData.TransparentRgb48.Value.R);
var g = BitConverter.GetBytes(pngMetaData.TransparentRgb48.Value.R);
var b = BitConverter.GetBytes(pngMetaData.TransparentRgb48.Value.B);
var alphaArray = r.Concat(g).Concat(b).ToArray();
this.WriteChunk(stream, PngChunkType.PaletteAlpha, alphaArray, 0, alphaArray.Length);
}
else if (pngMetaData.Rgb24Trans != null)
else if (pngMetaData.TransparentRgb24 != null)
{
var alphaArray = new byte[6];
alphaArray[1] = pngMetaData.Rgb24Trans.Value.R;
alphaArray[3] = pngMetaData.Rgb24Trans.Value.G;
alphaArray[5] = pngMetaData.Rgb24Trans.Value.B;
alphaArray[1] = pngMetaData.TransparentRgb24.Value.R;
alphaArray[3] = pngMetaData.TransparentRgb24.Value.G;
alphaArray[5] = pngMetaData.TransparentRgb24.Value.B;
this.WriteChunk(stream, PngChunkType.PaletteAlpha, alphaArray, 0, alphaArray.Length);
}
}
else if (pngMetaData.ColorType == PngColorType.Grayscale)
{
if (pngMetaData.Luminance16Trans != null)
if (pngMetaData.TransparentGray16 != null)
{
var alphaArray = BitConverter.GetBytes(pngMetaData.Luminance16Trans.Value);
var alphaArray = BitConverter.GetBytes(pngMetaData.TransparentGray16.Value.PackedValue);
this.WriteChunk(stream, PngChunkType.PaletteAlpha, alphaArray, 0, alphaArray.Length);
}
else if (pngMetaData.LuminanceTrans != null)
else if (pngMetaData.TransparentGray8 != null)
{
var alphaArray = new byte[2];
alphaArray[1] = pngMetaData.LuminanceTrans.Value;
alphaArray[1] = pngMetaData.TransparentGray8.Value.PackedValue;
this.WriteChunk(stream, PngChunkType.PaletteAlpha, alphaArray, 0, alphaArray.Length);
}

8
src/ImageSharp/Formats/Png/PngMetaData.cs

@ -47,22 +47,22 @@ namespace SixLabors.ImageSharp.Formats.Png
/// <summary>
/// Gets or sets the Rgb 24 transparent color. This represents any color in an 8 bit Rgb24 encoded png that should be transparent
/// </summary>
public Rgb24? Rgb24Trans { get; set; }
public Rgb24? TransparentRgb24 { get; set; }
/// <summary>
/// Gets or sets the Rgb 48 transparent color. This represents any color in a 16 bit Rgb24 encoded png that should be transparent
/// </summary>
public Rgb48? Rgb48Trans { get; set; }
public Rgb48? TransparentRgb48 { get; set; }
/// <summary>
/// Gets or sets the 8 bit grayscale transparent color. This represents any color in an 8 bit grayscale encoded png that should be transparent
/// </summary>
public byte? LuminanceTrans { get; set; }
public Gray8? TransparentGray8 { get; set; }
/// <summary>
/// Gets or sets the 16 bit grayscale transparent color. This represents any color in a 16 bit grayscale encoded png that should be transparent
/// </summary>
public ushort? Luminance16Trans { get; set; }
public Gray16? TransparentGray16 { get; set; }
/// <summary>
/// Gets or sets a value indicating whether the image has transparency chunk and markers were decoded

16
src/ImageSharp/Formats/Png/PngScanlineProcessor.cs

@ -20,8 +20,8 @@ namespace SixLabors.ImageSharp.Formats.Png
ReadOnlySpan<byte> scanlineSpan,
Span<TPixel> rowSpan,
bool hasTrans,
ushort luminance16Trans,
byte luminanceTrans)
Gray16 luminance16Trans,
Gray8 luminanceTrans)
where TPixel : struct, IPixel<TPixel>
{
TPixel pixel = default;
@ -62,7 +62,7 @@ namespace SixLabors.ImageSharp.Formats.Png
rgba64.R = luminance;
rgba64.G = luminance;
rgba64.B = luminance;
rgba64.A = luminance.Equals(luminance16Trans) ? ushort.MinValue : ushort.MaxValue;
rgba64.A = luminance.Equals(luminance16Trans.PackedValue) ? ushort.MinValue : ushort.MaxValue;
pixel.FromRgba64(rgba64);
Unsafe.Add(ref rowSpanRef, x) = pixel;
@ -70,7 +70,7 @@ namespace SixLabors.ImageSharp.Formats.Png
}
else
{
byte scaledLuminanceTrans = (byte)(luminanceTrans * scaleFactor);
byte scaledLuminanceTrans = (byte)(luminanceTrans.PackedValue * scaleFactor);
Rgba32 rgba32 = default;
for (int x = 0; x < header.Width; x++)
{
@ -93,8 +93,8 @@ namespace SixLabors.ImageSharp.Formats.Png
int pixelOffset,
int increment,
bool hasTrans,
ushort luminance16Trans,
byte luminanceTrans)
Gray16 luminance16Trans,
Gray8 luminanceTrans)
where TPixel : struct, IPixel<TPixel>
{
TPixel pixel = default;
@ -135,7 +135,7 @@ namespace SixLabors.ImageSharp.Formats.Png
rgba64.R = luminance;
rgba64.G = luminance;
rgba64.B = luminance;
rgba64.A = luminance.Equals(luminance16Trans) ? ushort.MinValue : ushort.MaxValue;
rgba64.A = luminance.Equals(luminance16Trans.PackedValue) ? ushort.MinValue : ushort.MaxValue;
pixel.FromRgba64(rgba64);
Unsafe.Add(ref rowSpanRef, x) = pixel;
@ -143,7 +143,7 @@ namespace SixLabors.ImageSharp.Formats.Png
}
else
{
byte scaledLuminanceTrans = (byte)(luminanceTrans * scaleFactor);
byte scaledLuminanceTrans = (byte)(luminanceTrans.PackedValue * scaleFactor);
Rgba32 rgba32 = default;
for (int x = pixelOffset; x < header.Width; x += increment)
{

Loading…
Cancel
Save