如何在C#中将二维float数组扁平化转换为一维数组?
二维Float数组转一维数组适配MAGCOLOREFFECT的transform属性
我有如下二维float数组:
GrayScale = new float[,] { { 0.3f, 0.3f, 0.3f, 0.0f, 0.0f }, { 0.6f, 0.6f, 0.6f, 0.0f, 0.0f }, { 0.1f, 0.1f, 0.1f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f, 1.0f, 0.0f }, { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f } };
需要将其转换为一维数组,用于MAGCOLOREFFECT对象的transform属性,最终形式如下:
var greyScale = new MAGCOLOREFFECT { transform = new[] { 0.3f, 0.3f, 0.3f, 0.0f, 0.0f, 0.6f, 0.6f, 0.6f, 0.0f, 0.0f, 0.1f, 0.1f, 0.1f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f } };
转换方法
手动转换只需按行优先顺序,依次将二维数组每一行的元素平铺到一维数组中即可。如果需要代码自动转换,可以参考以下实现:
// 原始二维数组 float[,] grayScale2D = new float[,] { { 0.3f, 0.3f, 0.3f, 0.0f, 0.0f }, { 0.6f, 0.6f, 0.6f, 0.0f, 0.0f }, { 0.1f, 0.1f, 0.1f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f, 1.0f, 0.0f }, { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f } }; // 获取行列数 int rows = grayScale2D.GetLength(0); int cols = grayScale2D.GetLength(1); // 初始化一维数组 float[] grayScale1D = new float[rows * cols]; // 行优先遍历填充 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { grayScale1D[i * cols + j] = grayScale2D[i, j]; } } // 赋值给MAGCOLOREFFECT对象 var greyScaleEffect = new MAGCOLOREFFECT { transform = grayScale1D };
内容的提问来源于stack exchange,提问作者Scoobie
相关产品推荐
相关产品推荐

