1

以下の例は、XNA で Texture2D からデータを取得する C# の例です。私の理解では、最初に Texture2D.GetData を使用してデータを 2D 配列にプルすることはできません。

1D 配列に次のような値が含まれている場合:1, 2, 3, 4, 5, 6, 7, 8, 9

その1次元配列を2D配列にコピーして、2D配列に次のような値を持たせることは可能ですか?

1, 2, 3
4, 5, 6
7, 8, 9

私の目標は、反復してインデックスを計算するのではなく、配列全体を 1D から 2D にコピーすることです。私の現在のコードは次のようなものです:

    Color[,] TextureDataTo2DArray(Texture2D texture)
    {
        Color[] colors1D = new Color[texture.Width * texture.Height];
        texture.GetData(colors1D);

        Color[,] colors2D = new Color[texture.Width, texture.Height];
        for (int x = 0; x < texture.Width; x++)
            for (int y = 0; y < texture.Height; y++)
                colors2D[x, y] = colors1D[x + y * texture.Width];

        return colors2D;
    }
4

3 に答える 3

1

1D 配列を 2D 配列にコピーする場合、剰余算術が役に立ちます。

Color[,] TextureDataTo2DArray(Texture2D texture)
    {
        Color[] colors1D = new Color[texture.Width * texture.Height];
        texture.GetData(colors1D);

        Color[,] colors2D = new Color[texture.Width, texture.Height];
        for (int i = 0; i < colors1D.Length; i++)
            colors2D[Math.Floor(i / texture.Width), i % texture.Width] = colors1D[i];

        return colors2D;
    }

ただし、最終的には、配列の形状を変更する場合、ある形状と別の形状の間の対応を計算する必要があります。

于 2013-05-02T14:11:55.750 に答える
0

You could just increment a counter

index = 0;

for (int x = 0; x < texture.Width; x++)
    for (int y = 0; y < texture.Height; y++)
        colors2D[x, y] = colors1D[index++];
于 2013-05-02T14:48:46.160 に答える