public static void WriteMetadata(string sourceFile, string destinationFile, BitmapMetadata newMetadata) { BitmapCreateOptions createOptions = BitmapCreateOptions.PreservePixelFormat | BitmapCreateOptions.IgnoreColorProfile; // Open Source file (used to get Image and Thumbnail) using (Stream sourceStream = File.Open(sourceFile, FileMode.Open, FileAccess.Read)) { // Decode the Source BitmapDecoder sourceDecoder = BitmapDecoder.Create(sourceStream, createOptions, BitmapCacheOption.None); // Create a new jpeg frame, replacing the destination metadata with the source BitmapFrame destinationFrame = BitmapFrame.Create(sourceDecoder.Frames[0], sourceDecoder.Frames[0].Thumbnail, newMetadata, sourceDecoder.Frames[0].ColorContexts); // Create a new in-memory JPG file JpegBitmapEncoder destinationEncoder = new JpegBitmapEncoder(); destinationEncoder.Frames.Add(destinationFrame); // Open the destination file and save the jpg to it using (Stream destinationStream = File.Open(destinationFile, FileMode.Create, FileAccess.ReadWrite)) { destinationEncoder.Save(destinationStream); } } } |