0

我对编码很陌生,所以我不确定这是否是一个非常明显的问题。我所拥有的是一个有序的字节列表,表示像素和与这些像素相关的深度数据,因此当返回到一个框中时,它们会创建一个图像。我想要做的是将这些字节的一个较小的矩形隔离到一个新的字节数组中。

所以基本上我想跳过数组开头的大量字节(完全在较小矩形部分上方的字节),以及它左边的第一批,然后添加一行长度的将较小的盒子添加到新数组中,然后跳过盒子右侧的盒子,向下跳过下一行的左侧,添加长度,跳过右侧并重复所有操作,直到到达盒子的末尾。

我真的希望这个不好的解释对某人有意义。我不知道该怎么做。任何帮助将非常感激!

谢谢!

4

2 回答 2

2

最简单的选择可能是创建一个大小合适的字节数组,然后根据它的声音使用Array.Copyor Buffer.BlockCopy- 多次。

我怀疑你需要每行调用一次复制方法,计算出源数据中行的相关部分从哪里开始,在目标数据中行的相关部分从哪里开始。现在你已经有了基本的想法,剩下的就留给你了 - 但请随时要求更多澄清。不要忘记(在您的计算中)“目标”行号将不等于“源”行号!(我怀疑循环目标行号并添加偏移量是最简单的......)

于 2013-08-18T07:18:41.653 回答
1

我认为它看起来像这样:

const int numberOfBytesPerPixel = ...;

// input: original data
int originalWidth = ...;
int originalHeight = ...;
byte[] original = ...; // should have the correct size and contain the data

// input: desired position and size for cropping rectangle
int cropOffsetToTheRight = ...;
int cropOffsetDown = ...;
int cropWidth = ...;
int cropHeight = ...;

// get the rectangle:
byte[] crop = new byte[numberOfBytesPerPixel * cropWidth * cropHeight];
for (int rowNumber = 0; rowNumber < cropHeight; ++rowNumber)
{
    Array.Copy(
        original,
        numberOfBytesPerPixel * ((cropOffsetDown + rowNumber) * originalWidth + cropOffsetToTheRight),
        crop,
        numberOfBytesPerPixel * rowNumber,
        numberOfBytesPerPixel * cropWidth
        );
}

这是used重载Array.Copy的文档。

于 2013-08-18T10:45:53.367 回答