Показать изображение из базы данных как байт [] в silverlight

#silverlight

#silverlight

Вопрос:

я получаю изображение от клиента, преобразую его в байт [] и отправляю на сервер. И преобразуйте 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 resu<
}

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

Ответ №1:

У меня есть следующий код для преобразования массива байтов непосредственно в изображение:

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

Итак, пока преобразование в и из Base64String работает, это должно быть все, что вам нужно.

Кроме того, вам не нужно преобразовывать в a Base64String для сохранения в базе данных. Вам просто нужно установить тип столбца image равным (при условии, что вы используете MS SQL Server)

Комментарии:

1. Привет, Крис. Я использую MS-SQL, но я использую сопоставление метаданных через отражение и объект запроса. И с этой моделью домена я не могу добавить данные изображения в качестве изображения. И я не смог заставить все работать.

2. @turgut — я думаю, вам нужно разобраться в проблеме. Это ошибка преобразования изображения в строку? Или, возможно, хранение строки в базе данных? Проверяйте данные на каждом шаге. Выполните преобразование из byte[] -> string -> byte[] и убедитесь, что результат идентичен вводу.

3. Удивительно, что данные до преобразования и после преобразования совпадают.

4. @turgut — в таком случае я не понимаю, почему это не работает.

Ответ №2:

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

Ответ №3:

Я использовал BinaryReader и решил проблему.

Моя проблема заключалась в неправильном чтении изображения. я использовал BinaryReader для чтения изображения и решил проблему.

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

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

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