C# 编译器可以';在WP7中找不到JpegBitmapEncoder类

C# 编译器可以';在WP7中找不到JpegBitmapEncoder类,c#,silverlight,windows-phone-7,C#,Silverlight,Windows Phone 7,我要失去它了, 我做错了什么 错误3当前上下文中不存在名称“BitmapFrame” 错误2找不到类型或命名空间名称“JpegBitmapEncoder”(是否缺少using指令或程序集引用? 代码: namespace Microsoft.Samples.CRUDSqlAzure.Phone.Converters { using System; using System.Windows.Data; using System.IO; using System.Windows.Media.Imag

我要失去它了, 我做错了什么

错误3当前上下文中不存在名称“BitmapFrame”

错误2找不到类型或命名空间名称“JpegBitmapEncoder”(是否缺少using指令或程序集引用?

代码:

namespace Microsoft.Samples.CRUDSqlAzure.Phone.Converters
{
using System;
using System.Windows.Data;
using System.IO;
using System.Windows.Media.Imaging;

public class ImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        byte[] rawImageBytes = (byte[])value;
        BitmapImage imageSource = null;

        try
        {
            using (MemoryStream stream = new MemoryStream(rawImageBytes))
            {
                stream.Seek(0, SeekOrigin.Begin);
                BitmapImage b = new BitmapImage();
                b.SetSource(stream);
                imageSource = b;
            }
            return imageSource;
        }
        catch 
        {
            return null;
        }


    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        try
        {
            BitmapImage bitmapImage = (BitmapImage)value;
            byte[] data;
            JpegBitmapEncoder encoder = new JpegBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(bitmapImage));
            using (MemoryStream ms = new MemoryStream())
            {
                encoder.Save(ms);
                data = ms.ToArray();
            }
            return data;

        }
        catch
        {
            return null;
        }
    }
}

}wp7上的Silverlight没有JpegBitmapEncoder。如果要将位图源转换为字节数组,可以使用WriteableBitmap的SaveJpeg方法:

try
{
    BitmapImage bitmapImage = (BitmapImage)value;
    byte[] data;
    WriteableBitmap wb = new WriteableBitmap(bitmapImage);
    using (MemoryStream ms = new MemoryStream())
    {
        wb.SaveJpeg(ms, bitmapImage.PixelHeight, bitmapImage.PixelWidth, 0, 100);
        data = ms.ToArray();
    }
    return data;
}
catch
{
    return null;
}
如果要将BitmapSource转换为其他文件格式,如png或gif,则必须使用第三方库,如


但在转换器中来回转换图像不是一个好主意。我甚至不认为你真的需要。您使用什么控件修改位图源?:\

谢谢,我正在尝试将它绑定到我的xaml页面上的
元素。我需要使用一个转换器来实现这一点,因为我将数据保存在一个字节[]中,我仍然不完全理解您要做什么。所以你有你的图像保存为字节数组。。。所有内容都存储为字节数组,所以没关系。您希望将其绑定到图像控件。好的,您必须使用转换器将字节数组转换为ImageSource。但你为什么要把它转换回来呢?很好的一点,事实上,想想看,当我从数据库读取到应用程序时,我需要从字节数组转换到imagesource,当我用手机的摄像头拍照并保存到db时,我需要将它从imagesource转换到字节数组。我认为在活动中保存摄像头照片是一个更好的主意,我知道这不是你想用绑定来解决的问题。你可能是对的,我对这一点还不熟悉,并且仍然在了解如何用我拍摄的新照片更新我的MVVM应用程序中的模型数据上下文。有点困惑