如何从 NEF 或其他 RAW 格式制作字节数组并进行编辑?

问题描述

我试图在 WPF 中制作简单的照片编辑器(用于调整亮度、对比度、饱和度等...),我使用包含 ToByteArray 方法magick.net 但问题是我无法用这种方法制作 ByteArray,因为我遇到了异常,因为它出于某种原因不想从 NEF 格式制作 ByteArray...

我的第一个想法,是将 NEF 格式转换为临时 TIFF 文件,该文件可以通过此特定方法转换为 ByteArray 并且该文件可以转换为 bytearray,但我认为非常不方便而且不多聪明。

第二件事是当我拥有 WritableBitmap 时。我如何从中制作图像以供 magick.net 编辑?我应该制作另一个使用已创建的 ByteArray 创建的 MagickImage 实例并编辑该图像吗?

    public void ImageSelectBtn_Click(object sender,RoutedEventArgs e)
    {

        OpenFileDialog dialog = new OpenFileDialog();
        if (dialog.ShowDialog() == true)
        {
            using (var imageRaw = new MagickImage(dialog.FileName))
            {
                imageRaw.Write("D:/Coding/C#/New/SoftlightWPF/SoftlightWPF/Resources/temp.tiff");
                MagickImage image = new MagickImage();
                image = new MagickImage("D:/Coding/C#/New/SoftlightWPF/SoftlightWPF/Resources/temp.tiff");
                byte[] ImageBytes = image.ToByteArray();
                Render(ImageBytes);
            }

        }
    }
    private void Render(byte[] BytesData)
    {
        using (var ms = new MemoryStream(BytesData))
        {

            BitmapImage ImageBitmapSource = new BitmapImage(); //Image
            ImageBitmapSource.BeginInit();
            ImageBitmapSource.CacheOption = BitmapCacheOption.OnLoad;
            ImageBitmapSource.StreamSource = ms;
            ImageBitmapSource.EndInit();

            WriteableBitmap ImageWritableBitmap = new WriteableBitmap(ImageBitmapSource);
            this.ImageField.source = ImageWritableBitmap;
        }
    }

解决方法

已经有一个库可以帮助您解决这个问题:https://www.nuget.org/packages/Magick.NET.SystemWindowsMedia/。将其添加到您的项目中,然后改为执行 image.ToBitmapSource()