You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 11:47:59