7

这是我的代码...

    public async Task SetLargeImageAsync(byte[] imageBytes,
        bool storeBytesInObject = false)
    {

        var tcs = new TaskCompletionSource<string>();

        SmartDispatcher.BeginInvoke(() =>
        {
            using (MemoryStream ms = new MemoryStream(imageBytes))
            {

                if (storeBytesInObject)
                    this.LargeImageBytes = imageBytes;

                BitmapImage image = new BitmapImage();

                image.SetSource(ms);

                this.LargeImage = image;

                tcs.SetResult(string.Empty);
            }
        });

        await tcs.Task;
    }

我正在将字节发送到流中。这很好用;它正在显示图像。

但有时我会遇到以下异常:

图像标题无法识别。(HRESULT 异常:0x88982F61)在 MS.Internal.XcpImports.BitmapSource_SetSource(BitmapSource bitmapSource, CValue& byteStream) 在 System.Windows.Media.Imaging.BitmapSource.SetSourceInternal(Stream streamSource) 的 MS.Internal.XcpImports.CheckHResult(UInt32 hr)在 System.Windows.Media.Imaging.BitmapImage.SetSourceInternal(流流源) 在 System.Windows.Media.Imaging.BitmapSource.SetSource(流流源)

问题是什么?不同类型的图像有什么问题吗?

我发现某处我们应该使用以下代码来寻找起始位置:

ms.Seek(0, SeekOrigin.Begin)

这是真的吗?解决方案是什么?

4

3 回答 3

4

在开始操作之前确保 imageBytes.Position = 0。

于 2017-04-25T14:59:37.800 回答
2

您传入的图像无效 - 它已损坏或以 WP 无法原生解码的格式存储。支持格式的完整列表可在以下位置找到:http: //msdn.microsoft.com/en-us/library/windowsphone/develop/ff462087 (v=vs.105).aspx#BKMK_ImageSupport

于 2013-06-25T07:45:19.697 回答
1

正如 MarcosVasconcelos 在评论中提到的那样,我的解决方案是在写入流之后和设置 BitmapImage 流源之前将 MemoryStream 中的位置设置为开头。

例子:

public static BitmapImage CreateImage(byte[] src)
        {
            var img = new BitmapImage();
            var strm = new System.IO.MemoryStream();           

            strm.Write(src, 0, src.Length);

            // set the position of stream to 0 after writing to it
            strm.Seek(0, System.IO.SeekOrigin.Begin);

            img.BeginInit();
            img.StreamSource = strm;
            img.EndInit();
            return img;
        }
于 2019-04-26T18:49:56.710 回答