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");
}