通过调用一个函数getImage(out object),得到了一幅图像的数据,保存在输出参数object里面。
通过查看这个object变量,得知图像数据是以byte数组的形式保存在这个object对象里的。
但是我怎样访问object对象里存放的byte数组呢?

解决方案 »

  1.   

    byte [] b = (byte [])obj;
      

  2.   

    A better way is using "as" operator
    byte[] bData = obj as byte[];
    if( bData != null )
    {
       //Access its value here
    }
      

  3.   

    多谢两位:
    我使用laladeng() 的方法,编译通过,但是运行时抛出了一个异常
    我使用了Knight94(愚翁)的方法:运行也没错,但是 bData没有任何值,也就是=null
    不知道是怎么回事?
      

  4.   

    你先搞清楚你这object到底是什么类型,用试运行时先用obj.GetType()试试,然后把它转换成这个类型就可以了.
      

  5.   

    保存数据的对象是object类型的,对象名就用buffer吧
    我用Knight94(愚翁)提供的方法:byte[] bData = obj as byte[];
    使用“as”来进行类型转换(我不知道这样行不?)
    运行后没报错,但是bData指向空,没有任何引用
    情况就是这样的
      

  6.   

    应该是:byte[] bData = buffer as byte[];
    我把这个object类型的对象(buffer)用“as”转换为byte数组
      

  7.   

    这个object类型的对象是作为输出参数(out)传递给函数的,这个函数运行完后自动把
    图像数据保存到这个object类型的对象里面(不是我给它赋值的),接着我想把保存在这个
    对象里面的数据提取出来,问题就是这样的
      

  8.   

    你用什么方法认可他内部包含一个byte[] 的?监视窗口?如果是监视窗口的话,可以用GetType取出他的类型,就可以操作了.如果只是想把这个object所用的内存整到一个byte[]中,除中这个类型在定义时,用特性标明了他的内存排列方式,否则全无济于事.
      

  9.   

    as 关键字如果可以转换的就转换,转换不了的就返回null,可能你的object对象中保存的不是byte[]类型.
      

  10.   

    看看buffer.GetType().ToString()的值是什么。是不是Image
      

  11.   

    我用自动窗口查看这个object对象的值,发现里面都是一个一个的byte类型的值。这些值就是
    图像数据了
      

  12.   

    我查看过这个object对象的值,前40个byte是一个BMP位图文件的文件头,后面就是数据了
    而且可以根据buffer长度计算出这个图像480×360的格式
      

  13.   

    我用buffer.GetType().ToString()试了试,结果其值是“System.Byte[*]”
      

  14.   

    我测试了几种类型:byte[]的类型字符串是System.Byte[]
    byte*的类型字符串是System.Byte*
    byte arr[10]的类型字符串是<bytes>e__FixedBuffer0
      

  15.   

    我查看过byte数组b的类型的字符串说明:
    b.GetType().ToString(),结果是System.Byte[],而不是System.Byte[*]
    不知道这两个类型有身区别
      

  16.   

    to:mythofcynthia(Blue)
    你讲的有一定道理。但是现在,怎样才能访问buffer(object类型)里的byte数据呢?to:hnaulxd(博士) 
    实参是object类型的,函数运行完后这个输出参数(out)当然还是原来的类型(object),
    不同的是现在这个object变量里面保存了图像数据
      

  17.   

    我认为 Knight94(愚翁) 大哥的没问题,你先看看你返回的obj是不是空吧,然后在看内部是怎么获取结果并把结果给obj的
    我以前遇到图片的问题就是 Knight94(愚翁)大哥给解决的!
      

  18.   

    提供的是一个C#函数,我并没有直接通过COM。
    但是这个C#函数的底层可以是通过调用COM来实现的。
    但是我看到的只是一个随SDK提供的API函数。也没办法调用其深层的函数。
      

  19.   

    试了半天,灵感一来,终于把问题解决了,方法如下:
    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[]类型。多谢大家的帮助,分不多,还望笑纳。