C# 如何将Image.Source转换为字节数组?

C# 如何将Image.Source转换为字节数组?,c#,windows-phone-7,C#,Windows Phone 7,我的WP7应用程序有一个图像控件,其源在XAML中设置为图像,其生成操作设置为内容: <Image x:Name="MyImage" Source="/Images/myimage.png"/> 字节数组保存到数据库中,但当我检索时,我的转换器尝试将其转换回另一个页面时,会出现未指定的错误。这是我的转换器: public class BytesToImageConverter : IValueConverter { public object Convert( object

我的WP7应用程序有一个图像控件,其源在XAML中设置为图像,其生成操作设置为内容:

<Image x:Name="MyImage" Source="/Images/myimage.png"/>
字节数组保存到数据库中,但当我检索时,我的转换器尝试将其转换回另一个页面时,会出现未指定的错误。这是我的转换器:

public class BytesToImageConverter : IValueConverter {
    public object Convert( object Value, Type TargetType, object Parameter, CultureInfo Culture ) {
        if( Value != null && Value is byte[] ) {
            byte[] bytes = Value as byte[];

            using( MemoryStream stream = new MemoryStream( bytes ) ) {
                stream.Seek( 0, SeekOrigin.Begin );

                BitmapImage image = new BitmapImage();
                image.SetSource( stream ); // Unspecified error here
                return image;
            }
        }

        return null;
    }

    public object ConvertBack( object Value, Type TargetType, object Parameter, CultureInfo Culture ) {
        throw new NotImplementedException( "This converter only works for one way binding." );
    }
}
我已经做了相当多的搜索。至于转换器,我的代码相当标准。我见过有人提到那条流。Position=0;是必要的,但我的理解是流动的;两种我都试过了

由于我的转换器与我现在在十几个项目中使用的相同,我确信问题在于将图像控件的源代码转换为字节数组,因此我的图像数据已损坏。在上面的代码中,我正在硬编码Uri,但我也尝试过

BitmapImage image = MyImage.Source as BitmapImage;

没有运气。这件事我已经做了好几个小时了,而且我已经不知所措了。我缺少什么?

image.UriSource中的字节[]可能是base64基数。您可以浏览字节[]或SQL中的数据。
如果基数错误,则无法从字节[]反转为流。因此,如果基数为64,则必须转换为16基数。

image.UriSource中的字节[]可能是base64基数。您可以浏览字节[]或SQL数据库中的数据。
如果基数错误,则无法从字节[]反转为流。因此,如果基数为64,则必须转换为16基数。

我认为问题在于ImageToArray方法。您正在将WriteableBitmap对象转换为数组,而不是图像本身。尝试用以下方法替换您的方法:

    public byte[] ImageToArray()
    {
        BitmapImage image = new BitmapImage();
        image.CreateOptions = BitmapCreateOptions.None;
        image.UriSource = new Uri("/Images/myimage.png", UriKind.Relative);
        WriteableBitmap wbmp = new WriteableBitmap(image);
        MemoryStream ms = new MemoryStream();
        wbmp.SaveJpeg(ms, wbmp.PixelWidth, wbmp.PixelHeight, 0, 100);
        return ms.ToArray();
    }

此方法将图像作为jpg写入流,并返回字节。我没有尝试过该代码,但使用转换器将其转换回位图图像应该不会有问题。

我认为问题出在ImageToArray方法中。您正在将WriteableBitmap对象转换为数组,而不是图像本身。尝试用以下方法替换您的方法:

    public byte[] ImageToArray()
    {
        BitmapImage image = new BitmapImage();
        image.CreateOptions = BitmapCreateOptions.None;
        image.UriSource = new Uri("/Images/myimage.png", UriKind.Relative);
        WriteableBitmap wbmp = new WriteableBitmap(image);
        MemoryStream ms = new MemoryStream();
        wbmp.SaveJpeg(ms, wbmp.PixelWidth, wbmp.PixelHeight, 0, 100);
        return ms.ToArray();
    }

此方法将图像作为jpg写入流,并返回字节。我还没有尝试过该代码,但使用转换器将其转换回位图图像应该不会有问题。

这个问题已经问过了。这个问题已经问过了。一定要看看,我已经在几款发布的应用程序中使用我的代码一年多了,但是如果你的代码没有修复它,那就糟了。看来我需要重新评估我所做的事情。谢谢。我已经用我的代码一年多了,已经发布了好几个应用程序,但是如果你的代码没有修复它,那就太糟糕了。看来我需要重新评估我所做的事情。谢谢