.net - System.Drawing.Bitmap 到 JPEG XR

标签 .net jpeg-xr

如何将 System.Drawing.Bitmap (v4.0) 编码为 JPEG XR 流?

最佳答案

这可以通过 extension method 解决:

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

/// <remarks>
/// Requires reference to <c>System.Drawing</c>, <c>PresentationCore</c> and <c>WindowsBase</c>.
/// </remarks>
public static class JpegXr {

    public static MemoryStream SaveJpegXr(this Bitmap bitmap, float quality) {
        var stream = new MemoryStream();
        SaveJpegXr(bitmap, quality, stream);
        stream.Seek(0, SeekOrigin.Begin);
        return stream;
    }

    public static void SaveJpegXr(this Bitmap bitmap, float quality, Stream output) {
        var bitmapSource = bitmap.ToWpfBitmap();
        var bitmapFrame = BitmapFrame.Create(bitmapSource);
        var jpegXrEncoder = new WmpBitmapEncoder();
        jpegXrEncoder.Frames.Add(bitmapFrame);
        jpegXrEncoder.ImageQualityLevel = quality / 100f;
        jpegXrEncoder.Save(output);
    }

    /// <seealso cref="http://stackoverflow.com/questions/94456/load-a-wpf-bitmapimage-from-a-system-drawing-bitmap"/>
    public static BitmapSource ToWpfBitmap(this Bitmap bitmap) {
        using (var stream = new MemoryStream()) {
            bitmap.Save(stream, ImageFormat.Bmp);
            stream.Position = 0;
            var result = new BitmapImage();
            result.BeginInit();
            // According to MSDN, "The default OnDemand cache option retains access to the stream until the image is needed."
            // Force the bitmap to load right now so we can dispose the stream.
            result.CacheOption = BitmapCacheOption.OnLoad;
            result.StreamSource = stream;
            result.EndInit();
            result.Freeze();
            return result;
        }
    }

}

关于.net - System.Drawing.Bitmap 到 JPEG XR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13469631/

相关文章:

java - 使用java将图像导出为JPEG-XR?

css - 如何加载hdp文件作为背景图片

c# - 在 Windows Phone 7.1 中,我的后台代理周期性任务没有被一次又一次地调用

c# - .Net - 什么是 "unwind"?

.net - 从 powershell 执行单向 wcf 服务操作

c# - 奇怪的通用行为

c# - 单击 [C#] 修改图片框