Преобразование байта [] в тип изображения в C # для Windows Phone 7 - PullRequest
3 голосов
/ 06 апреля 2011

У меня проблема с преобразованием байтового массива в тип изображения для отображения в приложении на Windows Phone 7.

Данные извлекаются с сервера, и когда я загружаю и загружаю данные, они работаютхорошо, но я пытаюсь преобразовать его обратно в формат изображения.

Может кто-нибудь пролить свет на эту проблему для меня?

Это мой метод для преобразования массива байтов в BitmapImage,

public BitmapImage decodeImage(byte[] array)
{
    MemoryStream ms = new MemoryStream(array, 0, array.Length);

    // Convert byte[] to Image
    ms.Write(array, 0, array.Length);

    BitmapImage bitmapImage = new BitmapImage();
    bitmapImage.SetSource(ms);

    return bitmapImage;
}    

Тогда это код, в котором я пытаюсь установить возвращаемый BitmapImage в качестве источника для поля изображения, которое я использую в пользовательском интерфейсе XAML.

BitmapImage usrIMG = new BitmapImage();
usrIMG = getJson.decodeImage(userProfile.Photos[0].Image);
profileImage.Source = usrIMG;

Я знаюкод выглядит сбитым с толку, и я объявляю вещи, которые мне не нужны, я возился с ним целую вечность, и я совершенно в растерянности.

Большое спасибо

Ответы [ 4 ]

8 голосов
/ 07 апреля 2011

следующий код отлично работает для меня в быстром тесте для вашего сценария использования PhotoChooserTask и сохранения выбранного изображения в байтовом массиве. Возможно, вы также захотите просмотреть свой код, в котором храните и извлекать байтовый массив на своей стороне, чтобы убедиться, что там ничего не потеряно.

private byte[] imageBytes;
private void GetPhoto_Click(object sender, RoutedEventArgs e)
{
    PhotoChooserTask photoTask = new PhotoChooserTask();
    photoTask.Completed += new EventHandler<PhotoResult>(photoTask_Completed);
    photoTask.Show();
}

void photoTask_Completed(object sender, PhotoResult e)
{
    imageBytes = new byte[e.ChosenPhoto.Length];
    e.ChosenPhoto.Read(imageBytes, 0, imageBytes.Length);

    // save 'imageBytes' byte array to data base ...
}

private void ShowPhoto_Click(object sender, RoutedEventArgs e)
{
    // load 'imageBytes' byte array to data base ...
    BitmapImage bitmapImage = new BitmapImage();
    MemoryStream ms = new MemoryStream(imageBytes);
    bitmapImage.SetSource(ms);
    myImageElement.Source = bitmapImage;
}
1 голос
/ 18 сентября 2013
public BitmapImage ByteArraytoBitmap(Byte[] byteArray)
        {
            MemoryStream stream = new MemoryStream(byteArray);
            BitmapImage bitmapImage = new BitmapImage();
            bitmapImage.SetSource(stream);
            return bitmapImage;
        }

Я использовал этот код раньше, и он работает на 100% успешно.

1 голос
/ 30 апреля 2012

var bitmapImage = new BitmapImage ();

bitmapImage.SetSource (new MemoryStream (.. Двоичный массив данных ..));

img1.Source = bitmapImage;

1 голос
/ 06 апреля 2011

Вам понадобится WritableBitmap и знать высоту и ширину изображения, чтобы можно было это сделать.
Тогда вы можете сделать что-то вроде этого:

var result = new WriteableBitmap(width, height);
var ms = new MemoryStream();
ms.Write(myByteArray, myByteArray, myByteArray.Length);
result.SetSource(ms);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...