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