Conversion of BitmapImage to Byte array

前端 未结 3 841
悲哀的现实
悲哀的现实 2020-11-30 13:55

I want to convert a BitmapImage to ByteArray in a Windows Phone 7 Application. So I tried this but it throws the runtime Exception \"Invalid Pointer Exception\". Can anyone

相关标签:
3条回答
  • 2020-11-30 14:11

    I had same problem, this solves it:

    Code before:

    BitmapImage bi = new BitmapImage();
    bi.SetSource(e.ChosenPhoto);
    WriteableBitmap wb = new WriteableBitmap(bi);
    

    Code after:

    BitmapImage bi = new BitmapImage();
    bi.CreateOptions = BitmapCreateOptions.None;
    bi.SetSource(e.ChosenPhoto);
    WriteableBitmap wb = new WriteableBitmap(bi);
    
    0 讨论(0)
  • 2020-11-30 14:17

    Well I can make the code you've got considerably simpler:

    public static byte[] ConvertToBytes(this BitmapImage bitmapImage)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            WriteableBitmap btmMap = new WriteableBitmap
                (bitmapImage.PixelWidth, bitmapImage.PixelHeight);
    
            // write an image into the stream
            Extensions.SaveJpeg(btmMap, ms,
                bitmapImage.PixelWidth, bitmapImage.PixelHeight, 0, 100);
    
            return ms.ToArray();
        }
    }
    

    ... but that probably won't solve the problem.

    Another issue is that you're only ever using the size of bitmapImage - shouldn't you be copying that onto btmMap at some point?

    Is there any reason you're not just using this:

    WriteableBitmap btmMap = new WriteableBitmap(bitmapImage);
    

    Can you give us more information about where the error occurs?

    0 讨论(0)
  • 2020-11-30 14:26

    I'm not sure exactly what your problem is, but I know that the following code is a very minor change from code that I know works (mine was passing in a WriteableBitmap, not a BitmapImage):

    public static byte[] ConvertToBytes(this BitmapImage bitmapImage)
    {
        byte[] data = null;
        using (MemoryStream stream = new MemoryStream())
        {
            WriteableBitmap wBitmap = new WriteableBitmap(bitmapImage);
            wBitmap.SaveJpeg(stream, wBitmap.PixelWidth, wBitmap.PixelHeight, 0, 100);
            stream.Seek(0, SeekOrigin.Begin);
            data = stream.GetBuffer();
        }
    
        return data;
    }
    0 讨论(0)
提交回复
热议问题