我对编码很新,所以我不确定这是否是一个非常明显的问题。 我所拥有的是一个有序的字节列表,表示与这些像素相关的像素和深度数据,因此当返回到一个框中时,它们会创建一个图像。我要做的是将这些字节的较小矩形隔离成一个新的字节数组。
所以基本上我想跳过数组开头的大量字节(完全在较小的矩形部分之上的字节),以及它左边的第一批,然后添加一行的新数组的较小框的长度,然后跳过框右侧的那些,跳过下一行的左侧,添加长度,向右跳过并重复所有直到我到达框的末尾。
我真的希望不好的解释对某人有意义。我不知道该怎么做。任何帮助都会非常感激!
谢谢!
答案 0 :(得分:2)
最简单的选择可能是创建一个大小合适的字节数组,然后根据它的声音多次使用Array.Copy
或Buffer.BlockCopy
。
我怀疑你需要每行调用一次复制方法,找出源数据中行的相关部分开始的位置,目标数据中行的相关部分开始的位置。现在你已经有了基本的想法,我会把剩下的留给你,但随时可以要求更多的澄清。不要忘记(在你的计算中)“目标”行号不等于“源”行号! (我怀疑在目标行号上循环最简单,并添加一个偏移量......)
答案 1 :(得分: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
);
}