none
wpf bitmap转换得到的BitmapImage使用CpoyPixels出现内存不足 RRS feed

  • 问题

  •                 var formatConvertedBitmap = new FormatConvertedBitmap();
                    formatConvertedBitmap.BeginInit();
                    formatConvertedBitmap.Source = bitmap;
                    formatConvertedBitmap.DestinationFormat = PixelFormats.Bgra32;
                    formatConvertedBitmap.EndInit();
                    var stride = (bitmap.PixelWidth * PixelFormats.Bgra32.BitsPerPixel + 7) / 8;
    
                    pixelHeight = formatConvertedBitmap.PixelHeight;
    
                    // 像素内存转换
                    var bytes = new byte[stride * bitmap.PixelHeight * 2];
    
                    formatConvertedBitmap.CopyPixels(bytes, stride, 0);
    你好,我需要将bitmap的位图数据传递给C++底层,使用了上面的方法将位图数据转换为bytes,图片大小超过5M的时候出现内存不足的问题。该如何处理呢?谢谢

    code

    2017年6月15日 7:35

答案

  • 使用BitmapData来拷贝了

    大图片在拷贝位图内存前先压缩下图片

    没搞到增大程序使用内存的方法


    code

    • 已标记为答案 skczjun 2017年6月23日 6:24
    2017年6月23日 6:24

全部回复

  • 分辨率很高 5000X3000左右

    这个图片是用手机拍出来的,我需要将图片翻转到正面,然后获取位图数据,在进行CopyPixels的时候就报OutOfMemory.

    如果不进行翻转的话就正常获取数据。

    图片分辨率3000X1600的,翻转也可以正常获取位图数据,只有这个5000X3000的不能。


    code

    2017年6月16日 0:41
  • 8G内存,大概使用了400~500M的内存

    code

    2017年6月19日 0:33
  • 使用BitmapData来拷贝了

    大图片在拷贝位图内存前先压缩下图片

    没搞到增大程序使用内存的方法


    code

    • 已标记为答案 skczjun 2017年6月23日 6:24
    2017年6月23日 6:24