0

私はコーディングにかなり慣れていないので、これが本当に明白な質問であるかどうかはわかりません。私が持っているのは、ピクセルとそれらのピクセルに関連する深度データを表すバイトの順序付きリストであるため、ボックスに返されると画像が作成されます。私がやろうとしているのは、これらのバイトの小さな四角形を新しいバイト配列に分離することです。

したがって、基本的には、配列の先頭にある大量のバイト (小さな長方形セクションの完全に上にあるバイト) と、その左側の最初のロットをスキップし、長さの 1 行を追加したいと考えています。小さいボックスを新しい配列に追加し、ボックスの右側にあるものをスキップし、次の行の左側をスキップし、長さを追加し、右側をスキップして、ボックスの最後に到達するまですべてを繰り返します。

悪い説明が誰かにとって意味があることを本当に願っています. これを行う方法がわかりません。どんな助けでも本当に感謝します!

ありがとう!

4

2 に答える 2

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 に答える