STDMETHODIMP BufferCB( double dblSampleTime, BYTE * pBuffer, long lBufferSize ) 
  { 
  return 0; 
  } 
  
(摄像头得到的数据放在 pBuffer,指向的内存里) 
  
我什么把 摄像头的 数据在 HGE 显示出来 HGE 函数(纹理地址琐定函数) DWORD *Texture_Lock(HTEXTURE texture,bool bReadOnly = true,int left = 0,int top = 0,int width = 0,int height = 0); 返回值 
如果使用成功,从锁定的纹理数据返回指针。否则返回0。 LPBYTE buffer1 = (LPBYTE)hge->Texture_Lock(m_hTex,false,0,0,Texture_GetWidth(m_hTex));,hge->Texture_GetHeight(m_hTex)); 现在只要把 pBuffer 拷贝给  buffer1 就可以了 我的基础知识不行 
1:首先开辟缓冲 buffer1 ,可是开辟为什么类型,开辟多大呢? 2: 把摄像头得到的缓冲  BYTE * pBuffer 拷贝到 buffer1 
内存拷贝: 
memcpy(buffer1,pBuffer,lBufferSize);// 是这样不? 
谢谢! 

解决方案 »

  1.   

    开辟为什么类型?
    内存有类型吗?搞不懂什么意思....memcpy(buffer1,pBuffer,lBufferSize);//
    这个是对内存的填充...可以这么使用的....
      

  2.   

    开辟缓冲的大小=width×height×bitcount/8
      

  3.   

    比如;
    int 型啊
    float 型啊
      

  4.   

    memcpy(buffer1,pBuffer,lBufferSize);// 
    这个是对内存的填充...可以这么使用的....内存拷贝是哪个啊?
    谢谢!
      

  5.   


    你还是不明白我说的什么...我说的是内存有类型吗?你是不是只知道new int[number]这种开辟方式啊,但他的真正含义是什么,你了解了就不会问这个问题拉...
      

  6.   


    内存复制memmove比较安全,如两块内存有重叠的时候
      

  7.   

    从你接收到数据的缓冲区计算,如果你的缓冲区是CHAR类型的可以用strlen()一类
     的函数.一般缓冲区的类型多有BYTE和CHAR类型.比如你要开辟12个字节的缓冲区,用BYTE[12]
     CHAR[12]就可以了.如果你用int型的话只要int[3]就可以了,因为一个int有4个字节嘛.当然
    是好声明为指针,用malloc一类的函数动力分配内存最好了.
      

  8.   

    当然是好声明为指针,用malloc一类的函数动力分配内存最好了.这句话,不懂啊假设int *a;它就自动分配内存了啊还要进行 new 不?谢谢!
      

  9.   

    不好意思,我说的是"最好",后面那个是"动态分配",上班时间有点慌张打错了
    int *a; 只是声明了一个指针变量,并没有分配内存.要进行 a = new int[n]
    来分配内存,或者可以用 a = (int*)malloc(size); 这是一个C函数.
      

  10.   

    谢谢各位大哥! 
    现在情况是这样: bool FirstOpenBufferFlag = true;  //第一次开辟缓冲的标志 
    LPBYTE AcceptCapBuffer; 
    class CSampleGrabberCB : public ISampleGrabberCB 

      STDMETHODIMP BufferCB( double dblSampleTime, BYTE * pBuffer, long lBufferSize) 
      { 
        if(FirstOpenBufferFlag)  //第一次开辟缓冲的标志 
          { 
              FirstOpenBufferFlag = false;  //第一次开辟缓冲的标志 
        AcceptCapBuffer = (LPBYTE)malloc(lBufferSize*sizeof(BYTE)); 
          } 
          
        AcceptCapBuffer = (LPBYTE)hge->Texture_Lock(tex2,false,0,0,hge->Texture_GetWidth(tex2),hge->Texture_GetHeight(tex2)); //锁定纹理的内存地址 
          
        memcpy(AcceptCapBuffer,pBuffer,lBufferSize); //更新内存内存 
        hge->Texture_Unlock(tex2); //解锁 
        return 0; 
      } 
    }; 运行一样出现内存错误: 
    memcpy.asm 
    CopyUp: 
            test    edi,11b        ;U - destination dword aligned? 
            jnz    short CopyLeadUp ;V - if we are not dword aligned already, align         shr    ecx,2          ;U - shift down to dword count 
            and    edx,11b        ;V - trailing byte count         cmp    ecx,8          ;U - test if small enough for unwind copy 
            jb      short CopyUnwindUp ;V - if so, then jump         rep    movsd          ;N - move all of our dwords 错误在 rep    movsd          ;N - move all of our dwords 如果把 
    AcceptCapBuffer = (LPBYTE)hge->Texture_Lock(tex2,false,0,0,hge->Texture_GetWidth(tex2),hge->Texture_GetHeight(tex2)); //锁定纹理的内存地址 屏蔽掉,则就没有这个错误 
    锁定纹理的直接路径。 
    DWORD *Texture_Lock(HTEXTURE texture,bool bReadOnly = true,int left = 0,int top = 0,int width = 0,int height = 0); 返回值     If successful, returns a pointer to the locked texture data.Otherwise returns 0.     如果使用成功,从锁定的纹理数据返回指针。否则返回0。 
    这是什么原因,是不是摄像头资源格式和纹理的不相合? 
    应该也不是这样的原因啊? 请各位大哥帮我看看,谢谢!