通过调用一个函数getImage(out object),得到了一幅图像的数据,保存在输出参数object里面。
通过查看这个object变量,得知图像数据是以byte数组的形式保存在这个object对象里的。
但是我怎样访问object对象里存放的byte数组呢?
通过查看这个object变量,得知图像数据是以byte数组的形式保存在这个object对象里的。
但是我怎样访问object对象里存放的byte数组呢?
byte[] bData = obj as byte[];
if( bData != null )
{
//Access its value here
}
我使用laladeng() 的方法,编译通过,但是运行时抛出了一个异常
我使用了Knight94(愚翁)的方法:运行也没错,但是 bData没有任何值,也就是=null
不知道是怎么回事?
我用Knight94(愚翁)提供的方法:byte[] bData = obj as byte[];
使用“as”来进行类型转换(我不知道这样行不?)
运行后没报错,但是bData指向空,没有任何引用
情况就是这样的
我把这个object类型的对象(buffer)用“as”转换为byte数组
图像数据保存到这个object类型的对象里面(不是我给它赋值的),接着我想把保存在这个
对象里面的数据提取出来,问题就是这样的
图像数据了
而且可以根据buffer长度计算出这个图像480×360的格式
byte*的类型字符串是System.Byte*
byte arr[10]的类型字符串是<bytes>e__FixedBuffer0
b.GetType().ToString(),结果是System.Byte[],而不是System.Byte[*]
不知道这两个类型有身区别
你讲的有一定道理。但是现在,怎样才能访问buffer(object类型)里的byte数据呢?to:hnaulxd(博士)
实参是object类型的,函数运行完后这个输出参数(out)当然还是原来的类型(object),
不同的是现在这个object变量里面保存了图像数据
我以前遇到图片的问题就是 Knight94(愚翁)大哥给解决的!
但是这个C#函数的底层可以是通过调用COM来实现的。
但是我看到的只是一个随SDK提供的API函数。也没办法调用其深层的函数。
GetCurrentImage(out buffer,out buffersize); //通过此函数将图片数据保存到buffer(object类型)里
byte[] c = new byte[buffersize]; //创建一个byte数组,长度和buffersize一样
((System.Array)buffer).CopyTo(c,0);
通过使用“buffer.GetType.IsArray”知道,这个buffer实际上是System.Array类型的!!
所以对buffer进行类型转换((System.Array)buffer),再使用Array的一个方法CopyTo,将这个
Array里面的数据复制到令一个Array(数组c)中。
需要注意的是:System.Array型不是byte[]类型,不能直接把buffer转换成byte[]类型。多谢大家的帮助,分不多,还望笑纳。