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()
{