JPEG XR到C#中的位图

时间:2017-06-13 20:18:26

标签: c# jpeg-xr

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

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

非常感谢

1 个答案:

答案 0 :(得分: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");
        }