[英]C# - How do I create a new byte array from a portion of a larger one
我是編碼的新手,所以不確定這是否是一個很明顯的問題。 我所擁有的是一個有序的字節列表,它們代表像素和與這些像素有關的深度數據,因此當它們返回到盒子中時,它們會創建圖像。 我正在嘗試將這些字節的較小矩形隔離到一個新的字節數組中。
所以基本上我想跳過數組開頭的字節(完全在較小的矩形部分上方的字節),以及它左邊的第一批字節,然后添加長度的一行較小的框到新數組,然后跳過框右側的框,在下一行的左側跳過框,添加長度,跳過右側,然后重復所有操作,直到到達框的末尾。
我真的希望錯誤的解釋對某人有意義。 我不知道該怎么做。 任何幫助將非常感激!
謝謝!
最簡單的選擇可能是創建一個大小合適的字節數組,然后根據其聲音多次使用Array.Copy
或Buffer.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
使用的重載文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.