簡體   English   中英

C#-如何從較大的數組的一部分創建新的字節數組

[英]C# - How do I create a new byte array from a portion of a larger one

我是編碼的新手,所以不確定這是否是一個很明顯的問題。 我所擁有的是一個有序的字節列表,它們代表像素和與這些像素有關的深度數據,因此當它們返回到盒子中時,它們會創建圖像。 我正在嘗試將這些字節的較小矩形隔離到一個新的字節數組中。

所以基本上我想跳過數組開頭的字節(完全在較小的矩形部分上方的字節),以及它左邊的第一批字節,然后添加長度的一行較小的框到新數組,然后跳過框右側的框,在下一行的左側跳過框,添加長度,跳過右側,然后重復所有操作,直到到達框的末尾。

我真的希望錯誤的解釋對某人有意義。 我不知道該怎么做。 任何幫助將非常感激!

謝謝!

最簡單的選擇可能是創建一個大小合適的字節數組,然后根據其聲音多次使用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使用的重載文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM