diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFrame.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFrame.cs
index 4baaab3868..b8f88cfe0e 100644
--- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFrame.cs
+++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegFrame.cs
@@ -89,6 +89,11 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
///
public int McusPerColumn { get; set; }
+ ///
+ /// Gets the mcu size of the image.
+ ///
+ public Size McuSize => new Size(this.McusPerLine, this.McusPerColumn);
+
///
/// Gets the color depth, in number of bits per pixel.
///
diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs
index 04495f1721..3c48aabee0 100644
--- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs
+++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs
@@ -112,11 +112,6 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
///
Size IImageDecoderInternals.Dimensions => this.Frame.PixelSize;
- ///
- /// Gets the number of MCU blocks in the image as .
- ///
- public Size ImageSizeInMCU { get; private set; }
-
///
/// Gets a value indicating whether the metadata should be ignored when the image is being decoded.
///
@@ -834,6 +829,8 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
byte componentCount = this.temp[5];
this.ColorSpace = this.DeduceJpegColorSpace(componentCount);
+ this.Metadata.GetJpegMetadata().ColorType = this.ColorSpace == JpegColorSpace.Grayscale ? JpegColorType.Luminance : JpegColorType.YCbCr;
+
this.Frame = new JpegFrame
{
Extended = frameMarker.Marker == JpegConstants.Markers.SOF1,
@@ -844,14 +841,12 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
ComponentCount = componentCount
};
- this.Metadata.GetJpegMetadata().ColorType = this.ColorSpace == JpegColorSpace.Grayscale ? JpegColorType.Luminance : JpegColorType.YCbCr;
-
if (!metadataOnly)
{
remaining -= length;
const int componentBytes = 3;
- if (remaining > componentCount * componentBytes)
+ if (remaining != componentCount * componentBytes)
{
JpegThrowHelper.ThrowBadMarker("SOFn", remaining);
}
@@ -894,9 +889,6 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
this.Frame.MaxVerticalFactor = maxV;
this.Frame.InitComponents();
- this.ImageSizeInMCU = new Size(this.Frame.McusPerLine, this.Frame.McusPerColumn);
-
- // This can be injected in SOF marker callback
this.scanDecoder.InjectFrameData(this.Frame, this);
}
}
diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ParseStreamTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/ParseStreamTests.cs
index 2162ee13c6..e1307d3fc6 100644
--- a/tests/ImageSharp.Tests/Formats/Jpg/ParseStreamTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Jpg/ParseStreamTests.cs
@@ -48,7 +48,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
Size expectedSizeInBlocks = decoder.ImageSizeInPixels.DivideRoundUp(8);
- Assert.Equal(expectedSizeInBlocks, decoder.ImageSizeInMCU);
+ Assert.Equal(expectedSizeInBlocks, decoder.Frame.McuSize);
var uniform1 = new Size(1, 1);
JpegComponent c0 = decoder.Components[0];
@@ -70,7 +70,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
using (JpegDecoderCore decoder = JpegFixture.ParseJpegStream(imageFile))
{
sb.AppendLine(imageFile);
- sb.AppendLine($"Size:{decoder.ImageSizeInPixels} MCU:{decoder.ImageSizeInMCU}");
+ sb.AppendLine($"Size:{decoder.ImageSizeInPixels} MCU:{decoder.Frame.McuSize}");
JpegComponent c0 = decoder.Components[0];
JpegComponent c1 = decoder.Components[1];
@@ -115,7 +115,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
var uniform1 = new Size(1, 1);
- Size expectedLumaSizeInBlocks = decoder.ImageSizeInMCU.MultiplyBy(fLuma);
+ Size expectedLumaSizeInBlocks = decoder.Frame.McuSize.MultiplyBy(fLuma);
Size divisor = fLuma.DivideBy(fChroma);