如何将2D像素数组传递给BitmapSource.Create()?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将2D像素数组传递给BitmapSource.Create()?相关的知识,希望对你有一定的参考价值。

我有一个字节像素的2D数组,我想从中创建一个BitmapSource。鉴于BitmapSource.Create()需要1D数组加步幅,我应该如何传递我的2D数组?

我目前的解决方案是使用BlockCopy复制到中间1D数组:

int width = pixels2D.GetLength(1); int height = pixels2D.GetLength(0);
byte[] pixels1D = new byte [width * height ];
Buffer.BlockCopy(pixels2D, 0, pixels1D, 0, pixels1D.Length * sizeof(byte));
return BitmapSource.Create(width, height, 96, 96, System.Windows.Media.PixelFormats.Gray8,
                        null, pixels1D, stride: width * sizeof(byte));

但这依赖于我所理解的未定义的数组维度包装。我想要一个避免这种情况的解决方案,理想情况下避免复制数据。谢谢。

答案

据我所知,有三种方法可以实现这一点:

1)Block Copy,效率很高;

2)For loop,将pixels2D[i,j]复制到pixels1D[i*width+j],这也很有效;

3)Linqpixels2D.Cast<byte>().ToArray(),这很简单但很慢。

以上是关于如何将2D像素数组传递给BitmapSource.Create()?的主要内容,如果未能解决你的问题,请参考以下文章

将二维数组传递给另一个类 C++

将像素传递到 glTexImage2D() 后会发生啥情况?

无法将 1d 数组传递给方法,因为有 2d 数组参数

将 2d numpy 数组传递给 C++ 时出现 TypeError

将像素值从 PXCImage 获取到 2D 数组

Three.js/WebGL 和 2D Canvas -- 将 getImageData() 数组传递给 Three.DataTexture()