在silverlight中将数据库显示为byte []

时间:2011-11-02 16:11:43

标签: silverlight

我从客户端获取图像将其转换为byte []并将其发送到服务器。并将byte []转换为Base64String并插入数据库。

我反向显示图像。但我看不到图像。为什么???

//Convert to byte array
 public static byte[] ImageToByteArray(WriteableBitmap bitmap)

{
            int[] p = bitmap.Pixels;
            int len = p.Length << 2;
            byte[] result = new byte[len];
            Buffer.BlockCopy(p, 0, result, 0, len);
            return result;
}

//Converter
public object Convert(object value, Type targetType, object parameter,System.Globalization.CultureInfo culture)
        {
            if (value == null)
            {
                return null;
            }

            BitmapImage image = new BitmapImage();

            MemoryStream stream = new MemoryStream();
            stream.Write((byte[])value, 0, ((byte[])value).Length);
            image.SetSource(stream);


            return image;
        }

//While writing to database
else if (value.GetType() == typeof(byte[]))
            {
                return "'" + Convert.ToBase64String((byte[])value) + "'";
            }

else if ((type == typeof(byte[])))
            {
                return Convert.FromBase64String((string)value);
            }

3 个答案:

答案 0 :(得分:1)

我有以下代码将字节数组直接转换为图像:

var bitmapImage = new BitmapImage();
bitmapImage.SetSource(new MemoryStream(imageData));
newImage.Source = bitmapImage;

只要转换到Base64String和从Base64String转换,这应该是您所需要的。

另外,您不需要转换为image来存储在数据库中。您只需将列类型设置为{{1}}(假设您使用的是MS SQL Server)

答案 1 :(得分:1)

public class Base64StringToImageConverter : IValueConverter {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
            if (!(value is string)) return DependencyProperty.UnsetValue;

            BitmapImage bitmapImage = new BitmapImage();
            bitmapImage.SetSource(new MemoryStream(System.Convert.FromBase64String((string)value)));
            return bitmapImage;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
            // TODO: Implement this method
            throw new NotImplementedException();
        }
    }

答案 2 :(得分:0)

我使用了BinaryReader并解决了这个问题。

我的问题是没有正确读取图像。使用了BinaryReader读取图像并解决了问题。

                BinaryReader reader = new BinaryReader(fileInfo.OpenRead());

                byte[] tempImage = new byte[reader.BaseStream.Length];

                reader.Read(tempImage, 0, tempImage.Length);