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.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);
}
答案 0 :(得分:2)
重写此方法以使用泛型。
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);
}
变为:
private void CopyPixelsToBitmap<T>(T[] pixels, WriteableBitmap bitmap)
where T: struct
{
var elementSize = Marshal.SizeOf(typeof(T));
bitmap.WritePixels(new Int32Rect(0, 0, bitmap.PixelWidth, bitmap.PixelHeight),
pixels, bitmap.PixelWidth * elementSize, 0);
}
适用于任何值类型。
答案 1 :(得分:1)
Int16 [] array = new Int16 [1024];
这意味着您在内存中分配1024 * 16bits空间,实际上意味着数组的每个元素最多可以达到2 ^ 16 - 1。 如果您正在寻找占用的内存空间,可以使用sizeof。
答案 2 :(得分:1)
这是我到目前为止找到的最佳方式:
int elementSize = System.Runtime.InteropServices.Marshal.SizeOf(pixels.GetValue(0));