Converting Byte[] to Image type in C# for Windows Phone 7

11,985

Solution 1

the following code works fine for me in a quick test for your scenario of using the PhotoChooserTask, and store the selected image in a byte array. You also might want to review your code where you store and retrieve the byte array on your side, to make sure nothing gets lost there.

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

Solution 2

You'll need a WritableBitmap and to know the height and width of the image to be able to do this.
Then you can do something like this:

var result = new WriteableBitmap(width, height);
var ms = new MemoryStream();
ms.Write(myByteArray, myByteArray, myByteArray.Length);
result.SetSource(ms);

Solution 3

var bitmapImage = new BitmapImage();

bitmapImage.SetSource(new MemoryStream(..Binary array Data..));

img1.Source = bitmapImage;

Solution 4

public BitmapImage ByteArraytoBitmap(Byte[] byteArray)
        {
            MemoryStream stream = new MemoryStream(byteArray);
            BitmapImage bitmapImage = new BitmapImage();
            bitmapImage.SetSource(stream);
            return bitmapImage;
        }

i used this code before and it's work 100% successfuly.

Share:
11,985
Joshua 'Cuppers' Whittle
Author by

Joshua 'Cuppers' Whittle

Updated on June 04, 2022

Comments

  • Joshua 'Cuppers' Whittle
    Joshua 'Cuppers' Whittle almost 2 years

    I am having a problem converting a Byte array into an Image type for displaying in an application on Windows Phone 7.

    The data is retrieved from a server, and when I upload and download the data it works fine, but I am struggling when converting it back into an Image format.

    Can anyone shed some light on this issue for me?

    This is my method for turning the Byte array into a 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;
    }    
    

    Then this is the code where I try to set the returned BitmapImage to the source for the Image box I am using in the XAML UI.

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

    I know the code looks mishmashed, and I am declaring things that I dont need to, i have been fiddling with it for ages and I am completely at a loss.

    Many Thanks