0

イメージ (jpeg、png、tiff、gif など) をストリームとして取り、それをロスレス圧縮で jrx (jpeg xr) に変換するアプリケーションを作成したいと考えています。

それは私がこれまで試したことであり、使用可能な結果はありません:

using System.Windows.Media.Imaging;
    //decode jpg
    public static BitmapSource ReadJpeg(Stream imageStreamSource)
    {
        JpegBitmapDecoder decoder = new JpegBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
        BitmapSource bitmapSource = decoder.Frames[0];
        return bitmapSource;
    }
    //encode
    public static Stream Encode(BitmapSource image)
    {
        WmpBitmapEncoder encoder = new WmpBitmapEncoder();
        MemoryStream s = new MemoryStream();
        encoder.Frames.Add(BitmapFrame.Create(image));
        encoder.Save(s);
        return s;
    }

誰かが私を正しい方向に向けることができますか? 私は今しばらくここにぶら下がっています。

さらに情報が必要な場合は、お問い合わせください。

System.Drawing.Bitmap to JPEG XRは、指定された入力形式で機能していますが、画像のデコードの部分が欠落しているため、私の質問を完全にはカバーしていません。

私を正しい方向に向けてくれてありがとう!私は今、どのように進めるかを知っています。

4

1 に答える 1

-2

これを試して:

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


    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();


            result.CacheOption = BitmapCacheOption.OnLoad;
            result.StreamSource = stream;
            result.EndInit();
            result.Freeze();
            return result;
        }
    }
于 2015-01-09T11:46:44.910 に答える