首页 > 解决方案 > 如何从 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;
        }
    }

标签: c#wpfimagemagickmagick.net

解决方案


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


推荐阅读