2

C#で取得された個々の要素のサイズはどのようになっていますか? Array

Int16[] a1 = new Int16[1024];
Int16[] a2 = new byte[1024];
Array array = ...  // (either a1 or a2)

int elementSizeInBytes = array.____?

sizeof はコンパイル時の演算子であるため、sizeof は機能しません。もちろん、コンパイルすることさえできませんsizeof(array)sizeof(array[0])

要素の数を取得するのは簡単です。

int numElements = array.Length;

要素のサイズを返すメソッドはないようです。array / array.Lengthに割り当てられた合計スペースから計算できるようです。しかし、Array インスタンスで使用されるバイト単位の合計サイズを取得する方法は明らかではありません。


使用例:

質問は一般的なものですが、現在使用しようとしている方法は、配列バッファーの内容を WriteableBitmap にコピーすることです。

private void copyPixels2Bitmap(Array pixels, WriteableBitmap bitmap)
{
    int elementSize = pixels.GetValue(0).GetType().___?;
    bitmap.WritePixels(new Int32Rect(0, 0, bitmap.PixelWidth, bitmap.PixelHeight), 
        pixels, bitmap.PixelWidth * elementSize, 0);
}
4

3 に答える 3

3

これは私がこれまでに見つけた最良の方法です:

int elementSize = System.Runtime.InteropServices.Marshal.SizeOf(pixels.GetValue(0));
于 2013-06-03T00:44:51.157 に答える
1

Int16[] 配列 = 新しい Int16[1024];

これは、メモリ内に 1024*16 ビットのスペースを割り当てていることを意味します。実際には、配列の各要素が最大 2^16 - 1 になる可能性があることを意味します。占有されているメモリ スペースを探している場合は、sizeofを使用できます。

于 2013-06-02T19:16:41.293 に答える