如何调用需要Byte [] [] []参数的函数?

时间:2010-09-13 22:01:29

标签: c#

我应该初始化什么样的变量,我该怎么做?

例如

byte[][][] data = ?????;

该功能来自LibJpeg.NET库。功能定义是

Int32 jpeg_read_raw_data (
    Byte[][][] data,
    Int32 max_lines
)

这个函数没有好的文档,所以我不知道发送什么,但是我想尝试发送一些东西,看看函数会返回什么。

问题是我不知道怎么称呼它。

4 个答案:

答案 0 :(得分:2)

byte[][][] data is a 3 dimensional array, allocate it accordingly

= {{{0,1,2}{3,4,5}{6,7,8}}
   {{0,1,2}{3,4,5}{6,7,8}}
   {{0,1,2}{3,4,5}{6,7,8}}}

请注意!这不行!这是一个锯齿状的数组,所以除非你将数据定义为byte [3,3,3],否则你将无处可去。

我想到了:我不知道你为什么要使用这个库。是否有内置.NET JPEG类不足够的原因?如果是这样,我想有一种方法可以使用LibJpeg.NET库从文件中获取字节流并将其排列成3D数组。这似乎是一种非常“hacky”的方式,它让我想知道它是否只是一个C库的端口,没有适合.NET或甚至OOP等框架的更新。

答案 1 :(得分:2)

byte[][][]是一个数组((数组的字节数)),也称为锯齿状数组与三维数组相同(例如byte[,,] x = new byte[10,5,3];)。

以下是分配和初始化此类结构的示例:

        byte[][][] a = new byte[10][][];
        for (int i = 0; i < 10; i++)
        {
            a[i] = new byte[5][];
            for (int ii = 0; i < 5; i++)
            {
                a[i][ii] = new byte[3];
                a[i][ii][0] = 42;
                a[i][ii][1] = 52;
                a[i][ii][2] = 62;
            }
        }

哦,顺便说一下,这是一个相关的问题:C# 3 dimensional array definition issue

以下是锯齿状阵列上的MSDN条目:http://msdn.microsoft.com/en-us/library/2s05feca.aspx

答案 2 :(得分:1)

在仔细研究了LibJpeg.NET的来源之后,看起来你应该使用扫描行数初始化data数组的第一维:

byte[][][] data = new byte[max_lines][][];

读取原始数据时,数组的其余部分将被填充。

我不太熟悉那个API,所以我不知道如何获得扫描线的数量。

答案 3 :(得分:1)

为了纠正firoso的答案,你可以分配这样的数组,他只是没有指定C#中所需的类型(他的代码可以在Java中工作,AFAIK)

private byte[][][] lol =
        {
            new[]
                {
                    new byte[] {0, 1, 2},
                    new byte[] {3, 4, 5},
                    new byte[] {6, 7, 8}
                },
            new[]
                {
                    new byte[] {0, 1, 2},
                    new byte[] {3, 4, 5},
                    new byte[] {6, 7, 8}
                },
            new[]
                {
                    new byte[] {0, 1, 2},
                    new byte[] {3, 4, 5},
                    new byte[] {6, 7, 8}
                }
        };

new[]实际上是new byte[][]的快捷方式,new byte[]无法缩短为new[],因为编译器会将数字类型推断为int

如果您可以使用Heinzi的迭代方法,我会建议使用此方法;我只是指出可以像这样分配多维数组(这对很多特定数据都有好处)。