none
UWP 使用BitmapDecoder解码图片出现错误(附图) RRS feed

  • 问题

  • 经常出现上图的情况,偶尔也会有正常显示图像的时候,又或是弹出异常无法找到该组件

    解码code如下图 我在网上看过好多解码code 基本上都是这样写的.. 然而实在不清楚问题出在哪里(上图的图片size为198MB左右)

    恳请大神出面帮忙解答万分感谢!!!

    2017年5月7日 3:28

答案

  • 问题解决了...从内存流中读取数据时顺序出现了错误导致图片显示异常,之前有一位大神回复了该问题今天上来看的时候发现回复又没有了,, 没记住那位大神的名字, 不过他的回帖是正确的 没有及时标记为答复非常抱歉!
    • 已标记为答案 花開灬 2017年5月12日 4:57
    2017年5月12日 4:57

全部回复

  • http://pan.baidu.com/s/1dFciGeP百度网盘的图片链接地址

                if (MemoryStream == null)
                    goto Exit0;

                BitmapDecoder decoder = await BitmapDecoder.CreateAsync(MemoryStream);

                uint scaleHeight, scaleWidth = 0;

                //计算绽放之后的图片size
                if (controlHeight > imgProperties.Height)
                {
                    scaleHeight = imgProperties.Height;
                    scaleWidth = imgProperties.Width;
                }
                else
                {
                    scaleHeight = (uint)controlHeight;
                    scaleWidth = imgProperties.Width * (uint)controlHeight / imgProperties.Height;
                }

                BitmapTransform transform = new BitmapTransform();
                BitmapBounds bounds = new BitmapBounds();
                bounds.X = 0;
                bounds.Y = 0;
                bounds.Height = scaleHeight;
                bounds.Width = scaleWidth;

                transform.Bounds = bounds;
                transform.ScaledHeight = scaleHeight;
                transform.ScaledWidth = scaleWidth;

                PixelDataProvider pix = await decoder.GetPixelDataAsync(
                    decoder.BitmapPixelFormat,
                    decoder.BitmapAlphaMode,
                    transform,
                    ExifOrientationMode.IgnoreExifOrientation,
                    ColorManagementMode.ColorManageToSRgb);

                byte[] pixels = pix.DetachPixelData();

                WriteableBitmap Bmp = new WriteableBitmap((int)scaleWidth, (int)scaleHeight);

                using (Stream pixStream = Bmp.PixelBuffer.AsStream())
                {
                    await pixStream.WriteAsync(pixels, 0, (int)scaleWidth * (int)scaleHeight * 4);
                    await pixStream.FlushAsync();
                    pixStream.Seek(0,SeekOrigin.Begin);

                    Bmp.Invalidate();

                    return Bmp;
                }

    2017年5月8日 2:08
  • 问题解决了...从内存流中读取数据时顺序出现了错误导致图片显示异常,之前有一位大神回复了该问题今天上来看的时候发现回复又没有了,, 没记住那位大神的名字, 不过他的回帖是正确的 没有及时标记为答复非常抱歉!
    • 已标记为答案 花開灬 2017年5月12日 4:57
    2017年5月12日 4:57