Marshal ::与CvMat一起复制

时间:2012-07-13 01:11:25

标签: c++ opencv c++-cli

我需要使用c ++ / cli将图像发送到字节数组中。该图像最初采用Iplimage格式。

    int img_sz1 = img1->width * img1->height * img1->nChannels;
    array <Byte>^ hh1 = gcnew array<Byte> (img_sz1);
    Marshal::Copy( (IntPtr)img->imageData, hh1, 0, img_sz1 );

它工作正常。

我添加了编码步骤,将其发送为jpeg

    CvMat* buf1 = cvEncodeImage(".jpeg", img1, jpeg_params);
    img_sz1=buf1->width*buf1->height 
    Marshal::Copy( (IntPtr)buf1, hh1, 0, img_sz1 );

现在它编译得很好但是在编组时给出了错误:复制行

 An unhandled exception of type 'System.AccessViolationException' occurred in   
 mscorlib.dll. Additional information: Attempted to read or write protected memory. 

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

cvEncodeImage的返回是单行矩阵,包含编码图像数据。您现在要复制的是结构本身,例如宽度字段,高度字段等。我相信您需要从buf1->data复制。