diff --git a/src/ImageSharp/MetaData/ImageMetaData.cs b/src/ImageSharp/MetaData/ImageMetaData.cs index f4aef98632..a40df3110d 100644 --- a/src/ImageSharp/MetaData/ImageMetaData.cs +++ b/src/ImageSharp/MetaData/ImageMetaData.cs @@ -142,28 +142,7 @@ namespace ImageSharp /// internal void SyncProfiles() { - this.SyncExifProfile(); - } - - private void SyncExifProfile() - { - if (this.ExifProfile == null) - { - return; - } - - this.SyncExifResolution(ExifTag.XResolution, this.HorizontalResolution); - this.SyncExifResolution(ExifTag.YResolution, this.VerticalResolution); - } - - private void SyncExifResolution(ExifTag tag, double resolution) - { - ExifValue value = this.ExifProfile.GetValue(tag); - if (value != null) - { - Rational newResolution = new Rational(resolution, false); - this.ExifProfile.SetValue(tag, newResolution); - } + this.ExifProfile?.Sync(this); } } } diff --git a/src/ImageSharp/MetaData/Profiles/Exif/ExifProfile.cs b/src/ImageSharp/MetaData/Profiles/Exif/ExifProfile.cs index 5074639855..3bd5ef3cb1 100644 --- a/src/ImageSharp/MetaData/Profiles/Exif/ExifProfile.cs +++ b/src/ImageSharp/MetaData/Profiles/Exif/ExifProfile.cs @@ -224,6 +224,26 @@ namespace ImageSharp return writer.GetData(); } + /// + /// Synchronizes the profiles with the specified meta data. + /// + /// The meta data. + internal void Sync(ImageMetaData metaData) + { + this.SyncResolution(ExifTag.XResolution, metaData.HorizontalResolution); + this.SyncResolution(ExifTag.YResolution, metaData.VerticalResolution); + } + + private void SyncResolution(ExifTag tag, double resolution) + { + ExifValue value = this.GetValue(tag); + if (value != null) + { + Rational newResolution = new Rational(resolution, false); + this.SetValue(tag, newResolution); + } + } + private void InitializeValues() { if (this.values != null) diff --git a/tests/ImageSharp.Tests/MetaData/ImageMetaDataTests.cs b/tests/ImageSharp.Tests/MetaData/ImageMetaDataTests.cs index 60e04e18db..3c0057b627 100644 --- a/tests/ImageSharp.Tests/MetaData/ImageMetaDataTests.cs +++ b/tests/ImageSharp.Tests/MetaData/ImageMetaDataTests.cs @@ -80,28 +80,13 @@ namespace ImageSharp.Tests Image image = new Image(1, 1); image.MetaData.ExifProfile = exifProfile; - image.MetaData.HorizontalResolution = 200; - image.MetaData.VerticalResolution = 300; - - image.MetaData.HorizontalResolution = 100; - - Assert.Equal(200, ((Rational)image.MetaData.ExifProfile.GetValue(ExifTag.XResolution).Value).ToDouble()); - Assert.Equal(300, ((Rational)image.MetaData.ExifProfile.GetValue(ExifTag.YResolution).Value).ToDouble()); - - image.MetaData.SyncProfiles(); - - Assert.Equal(100, ((Rational)image.MetaData.ExifProfile.GetValue(ExifTag.XResolution).Value).ToDouble()); - Assert.Equal(300, ((Rational)image.MetaData.ExifProfile.GetValue(ExifTag.YResolution).Value).ToDouble()); - - image.MetaData.VerticalResolution = 150; - - Assert.Equal(100, ((Rational)image.MetaData.ExifProfile.GetValue(ExifTag.XResolution).Value).ToDouble()); - Assert.Equal(300, ((Rational)image.MetaData.ExifProfile.GetValue(ExifTag.YResolution).Value).ToDouble()); + image.MetaData.HorizontalResolution = 400; + image.MetaData.VerticalResolution = 500; image.MetaData.SyncProfiles(); - Assert.Equal(100, ((Rational)image.MetaData.ExifProfile.GetValue(ExifTag.XResolution).Value).ToDouble()); - Assert.Equal(150, ((Rational)image.MetaData.ExifProfile.GetValue(ExifTag.YResolution).Value).ToDouble()); + Assert.Equal(400, ((Rational)image.MetaData.ExifProfile.GetValue(ExifTag.XResolution).Value).ToDouble()); + Assert.Equal(500, ((Rational)image.MetaData.ExifProfile.GetValue(ExifTag.YResolution).Value).ToDouble()); } } } diff --git a/tests/ImageSharp.Tests/MetaData/Profiles/Exif/ExifProfileTests.cs b/tests/ImageSharp.Tests/MetaData/Profiles/Exif/ExifProfileTests.cs index f4a2bcf401..8ec57057f2 100644 --- a/tests/ImageSharp.Tests/MetaData/Profiles/Exif/ExifProfileTests.cs +++ b/tests/ImageSharp.Tests/MetaData/Profiles/Exif/ExifProfileTests.cs @@ -203,6 +203,39 @@ namespace ImageSharp.Tests Assert.Equal(7, image.MetaData.ExifProfile.Values.Count()); } + [Fact] + public void Syncs() + { + ExifProfile exifProfile = new ExifProfile(); + exifProfile.SetValue(ExifTag.XResolution, new Rational(200)); + exifProfile.SetValue(ExifTag.YResolution, new Rational(300)); + + ImageMetaData metaData = new ImageMetaData(); + metaData.ExifProfile = exifProfile; + metaData.HorizontalResolution = 200; + metaData.VerticalResolution = 300; + + metaData.HorizontalResolution = 100; + + Assert.Equal(200, ((Rational)metaData.ExifProfile.GetValue(ExifTag.XResolution).Value).ToDouble()); + Assert.Equal(300, ((Rational)metaData.ExifProfile.GetValue(ExifTag.YResolution).Value).ToDouble()); + + exifProfile.Sync(metaData); + + Assert.Equal(100, ((Rational)metaData.ExifProfile.GetValue(ExifTag.XResolution).Value).ToDouble()); + Assert.Equal(300, ((Rational)metaData.ExifProfile.GetValue(ExifTag.YResolution).Value).ToDouble()); + + metaData.VerticalResolution = 150; + + Assert.Equal(100, ((Rational)metaData.ExifProfile.GetValue(ExifTag.XResolution).Value).ToDouble()); + Assert.Equal(300, ((Rational)metaData.ExifProfile.GetValue(ExifTag.YResolution).Value).ToDouble()); + + exifProfile.Sync(metaData); + + Assert.Equal(100, ((Rational)metaData.ExifProfile.GetValue(ExifTag.XResolution).Value).ToDouble()); + Assert.Equal(150, ((Rational)metaData.ExifProfile.GetValue(ExifTag.YResolution).Value).ToDouble()); + } + [Fact] public void Values() {