0

我正在使用 C#,需要处理 Jpeg-XR 图像。但是这些图片都是以base64字符串的形式呈现的,需要直接转换成Bitmap对象。我可以将其写入文件并进行转换,但这会显着影响我的运行时间。

我想知道是否有人可以帮助我提供示例代码或提示?(我已经尝试过 Magick.Net,但这对我不起作用,而且似乎也无法直接加载 JXR 图像)。

多谢

4

1 回答 1

0

JPEG XR 以前称为 HD Photo 和 Windows Media Photo。

您可以使用 WPF 库中 System.Windows.Media.Imaging 中的 WmpBitmapDecoder 类来操作 .jxr 图像。

此类定义 Microsoft Windows Media Photo 编码图像的解码器。以下代码将 JXR 文件转换为 Bmp 文件:

       using System.IO;
       using System.Windows.Media.Imaging;

         public class JXrLib
        {
            public static void JxrToBmp(string source, string target)
            {
                Stream imageStreamSource = new FileStream(source, FileMode.Open, FileAccess.Read, FileShare.Read);
                WmpBitmapDecoder decoder = new WmpBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
                BitmapSource bitmapSource = decoder.Frames[0];

                var encoder = new BmpBitmapEncoder(); ;
                encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
                using (var stream = new FileStream(target, FileMode.Create))
                {
                    encoder.Save(stream);
                }

            }
        }

代码经过测试并且运行良好。

备选方案 2:

如果您对使用 Magick.Net 感兴趣,可以使用https://jxrlib.codeplex.com中的 jxrlib 库

将文件 JXRDecApp.exe 和 JXREncApp.exe 复制到您的 bin 目录并从磁盘上具有 .jxr 扩展名的文件中读取。(您必须使用 Visual Studio 编译 jxrlib)

代码示例:

        // Read first frame of jxr image
        //JXRDecApp.exe ,JXREncApp.exe should be located in the path of binaries
        using (MagickImage image = new MagickImage(@"images\myimage1.jxr"))
        {
            // Save frame as bmp
            image.Write("myimage2.bmp");

            // even , Save frame as jxr
            image.Write("myimage2.jxr");
        }
于 2017-06-14T04:45:25.123 回答