INSSBuffer  pSample = null;  //是一个基本buffer
这是一个把图片写入电影的语句,他指定了pSample必须是INSSBuffer类型的
m_pWMWriter.WriteSample(m_dwVideoInput, 10000 * m_msVideoTime, SampleFlag.CleanPoint, pSample);但是我把得到的图片的是Byte[]类的buffer,就像
byte[] bytes = new byte[40];
 fixed (byte* ptr = &bytes[0])
{
 IntPtr p1= (IntPtr)ptr //这个就是这个buffer开始的指针吧,后面就假设是图片数据
}
怎么把bytes的转化成INSSBuffer呀?
我弄到个例子是:
INSSBuffer  pSample = null;  
IntPtr ip;
m_pWMWriter.AllocateSample(iSize, out pSample); 
pSample.GetBuffer(out ip);
CopyMemory(ip, (IntPtr)ptr, bytes.length);
m_pWMWriter.WriteSample(m_dwVideoInput, 10000 * m_msVideoTime, SampleFlag.CleanPoint, pSample);
上面试把一块指定大小内存复制从一个buffer复制到另一个。测试了可以用,但效率低了,能不能不进行复制,直接引用下酒用。 问题就是WriteSample指定得用INSSBuffer这个类型的不知道说清楚了没,对C++那些东西实在不太懂。求各位大侠帮忙.

解决方案 »

  1.   

    一般内存表示为一个数组,比如BUFFER[1024],BUFFER其实是一个指针,指向这块内存的第一个地址;
    那么你可以通过把你的INSSBuffer类型数组的指针指向它。
      

  2.   

    INSSBuffer  pSample = null;  
    不知道你说的INSSBuffer是什么 不过应该是一个指针吧
    但是我把得到的图片的是Byte[]类的buffer,就是一个数组的引用 可以简单的认为他们是相同的概念 
      

  3.   

    INSSBuffer是一个类,IntPtr是它的一个成员变量,INSSBuffer类里面估计可能有SetBuffer()之类的
    函数,如果有的话,只要把IntPtr类型的变量设进去就行了。
      

  4.   

    还是听的迷迷糊糊的,我知道大家意思是2个buffer第一个指针都指向同一个位置,然后buffer大小一样就成了。
    INSSBuffer这是个基本类,不知道怎么去初始化,用new不行,不初始化里面的方法不能用,不能设置大小,也得不到第一个地址的指针了
      

  5.   

    你又不说INSSBuffer  是个啥,谁知道怎么转呢,把定义贴出来呀。
      

  6.   

    http://msdn.microsoft.com/en-us/library/dd743243%28VS.85%29.aspx
    msdn这里有定义