C#-如何从较大字节数组的一部分创建新的字节数组

本文关键字:数组 字节数 字节 一部分 创建 C#- | 更新日期: 2023-09-27 18:28:07

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

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

我真的希望这种糟糕的解释对某人有意义。我不知道该怎么做。任何帮助都将不胜感激!

谢谢!

C#-如何从较大字节数组的一部分创建新的字节数组

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

我怀疑您需要每行调用一次copy方法,计算出该行的相关部分在源数据中的起始位置,以及该行的相应部分在目标数据中的开始位置。现在你已经有了基本的想法,我暂时把剩下的留给你,但你可以要求更多的澄清。不要忘记(在计算中)"目标"行号不会等于"源"行号!(我怀疑在目标行号上循环并添加偏移量是最容易的…)

我想它看起来像这样:

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
        );
}

这是所使用的Array.Copy过载的文档。