JPEG XR в растровое изображение в C#

Я использую C#, и мне нужно обрабатывать изображения в формате Jpeg-XR. Тем не менее, эти изображения представлены в виде строк base64 и должны быть преобразованы в объекты Bitmap напрямую. Я могу записать его в файл и конвертировать, но это существенно влияет на мое время работы.

Мне было интересно, может ли кто-нибудь помочь мне с примером кода или подсказкой? (Я уже пробовал Magick.Net, но у меня это не сработало, и, похоже, я не могу загрузить изображение JXR напрямую).

большое спасибо

1 ответ

JPEG XR ранее известен как HD Photo и Windows Media Photo.

Вы можете использовать класс WmpBitmapDecoder в System.Windows.Media.Imaging в библиотеке WPF для управления изображениями.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, вы можете использовать библиотеку jxrlib на https://jxrlib.codeplex.com/

Скопируйте файлы JXRDecApp.exe и JXREncApp.exe в каталог bin и прочитайте файл на диске с расширением.jxr. (вы должны скомпилировать jxrlib, используя visual studio)

Пример кода:

        // 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");
        }
Другие вопросы по тегам