Browse Source

Moved synchronization code to the ExifProfile.

af/merge-core
Dirk Lemstra 9 years ago
parent
commit
6550d3f1cf
  1. 23
      src/ImageSharp/MetaData/ImageMetaData.cs
  2. 20
      src/ImageSharp/MetaData/Profiles/Exif/ExifProfile.cs
  3. 23
      tests/ImageSharp.Tests/MetaData/ImageMetaDataTests.cs
  4. 33
      tests/ImageSharp.Tests/MetaData/Profiles/Exif/ExifProfileTests.cs

23
src/ImageSharp/MetaData/ImageMetaData.cs

@ -142,28 +142,7 @@ namespace ImageSharp
/// </summary>
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);
}
}
}

20
src/ImageSharp/MetaData/Profiles/Exif/ExifProfile.cs

@ -224,6 +224,26 @@ namespace ImageSharp
return writer.GetData();
}
/// <summary>
/// Synchronizes the profiles with the specified meta data.
/// </summary>
/// <param name="metaData">The meta data.</param>
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)

23
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());
}
}
}

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

Loading…
Cancel
Save