我有一個二維數組聲明爲new byte[w, h]
。我想給出座標(x1,y1)
- (x2,y2)
這個數組的子部分。什麼是最快的方法來做到這一點?是否有任何「切片」2D陣列的方法?如何裁剪二維數組的子部分?
3
A
回答
1
你可以使用Array.Copy :
int w2 = x2 - x1 + 1;
int h2 = y2 - y1 + 1;
byte[,] array2 = new byte[w2, h2];
for (int i = 0; i < w2; i++)
{
Array.Copy(array1, (i+x1)*h + y1, array2, i*h2, h2);
}
對於大型陣列,這可能會更快。但是這兩個嵌套循環更具可讀性。
1
我不能想出一個更快的方法,但你可以使用兩個嵌套的循環:
byte[,] array2 = new byte[x2 - x1, y2 - y1];
for (int i = x1; i < x2; i++)
{
for (int j = y1; j < y2; j++)
{
array2[i-x1, j-y1] = array[i, j];
}
}
對於交錯數組,你可以使用LINQ查詢:
IEnumerable<byte> x = array3.Skip(x1)
.Take(x2-x1)
.SelectMany(a => a.Skip(y1).Take(y2-y1));
+0
想到也許我們可以使用某種類型的MemoryStream來複制塊。哦,那現在就得做。謝謝:-) – mpen
+0
是的,我懷疑有。我希望這不是最好的答案。 –
相關問題
- 1. '裁剪'二維數組?
- 2. 如何裁剪數組的一部分?
- 3. C++裁剪一個連續的二維數組
- 4. 如何裁剪圖像的一部分
- 5. 二維數組python的求和部分
- 6. C#:複製二維數組的部分
- 7. 如何將二維數組的一部分分配給CUDA流?
- 8. Graphviz圖部分裁剪
- 9. 如何將二維數組的一部分複製到一維數組中?
- 10. 如何基於二維陣列上裁剪圖像
- 11. 如何外部全局二維數組?
- 12. 如何打印二維數組的一部分
- 13. 如何打印二維數組的一部分
- 14. 多維數組的複製子部分
- 15. iPad:裁剪視頻並僅播放裁剪部分
- 16. 如何創建二維數組的二維數組?
- 17. 如何創建二維char數組的二維數組?
- 18. java:如何將二維數組拆分爲兩個二維數組
- 19. 裁剪圖像的特定部分
- 20. 選擇圖像的一部分(裁剪)
- 21. 裁剪頁面的一部分
- 22. 裁剪維諾圖蟒
- 23. 拆分爲二維數組
- 24. 分配二維數組ç
- 25. 分配二維數組
- 26. 裁剪一個Matlab數組?
- 27. 如何零二維數組
- 28. 如何在二維數組
- 29. 如何在Matlab中裁剪任意維數的矩陣?
- 30. 如何裁剪和旋轉python中的圖像的一部分?
切片可以環繞陣列邊緣。即Is(2,2)=>(1,2)是否有效? –
@steaks:否。裁剪區域將始終位於原始字節數組內。最壞的情況是它的尺寸完全相同:(0,0)到(w-1,h-1)。 – mpen
,因爲它是一個'Array'或者你可以使用'Matrix'? – WiiMaxx