我应该初始化什么样的变量,我该怎么做?
例如
byte[][][] data = ?????;
该功能来自LibJpeg.NET库。功能定义是
Int32 jpeg_read_raw_data (
Byte[][][] data,
Int32 max_lines
)
这个函数没有好的文档,所以我不知道发送什么,但是我想尝试发送一些东西,看看函数会返回什么。
问题是我不知道怎么称呼它。
答案 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的迭代方法,我会不建议使用此方法;我只是指出可以像这样分配多维数组(这对很多特定数据都有好处)。