0

所以我的程序正在修复一些图像伪影,它是这样的:

void FixFile(string path)
{
    var bmp = new WriteableBitmap(new BitmapImage(new Uri(path)));
    bmp.Lock();

    // magick

    bmp.Unlock();

    using (var stream = new FileStream(path.Replace("DSC", "fix_DSC"), FileMode.Create))
    {
        var encoder = new JpegBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(bmp));
        encoder.Save(stream);
    }
}

问题是固定图像不包含 EXIF 数据。如何从原始图像传输 EXIF 数据?

4

1 回答 1

1

将源位图加载为BitmapFrame,而不是BitmapImage。然后将Metadata源的属性传递给BitmapFrame添加到Frames编码器集合中的新的。

public void FixFile(string path)
{
    var source = BitmapFrame.Create(new Uri(path));
    var metadata = (BitmapMetadata)source.Metadata;

    var bmp = new WriteableBitmap(source);
    bmp.Lock();
    // magick
    bmp.Unlock();

    var target = BitmapFrame.Create(bmp, null, metadata, null); // here

    var encoder = new JpegBitmapEncoder();
    encoder.Frames.Add(target);

    using (var stream = File.OpenWrite(path.Replace("DSC", "fix_DSC")))
    {
        encoder.Save(stream);
    }
}
于 2021-09-21T17:43:48.133 回答