函数memcpy()正在关闭程序

时间:2014-11-18 00:33:35

标签: c opencv memcpy

当编译器遇到函数memcpy()时,程序停止工作并显示消息框“name_program has stopped working”。

这是功能:

IplImage* hBitmap2Ipl(HBITMAP hBmp)
{
    BITMAP bmp;
    ::GetObject(hBmp,sizeof(BITMAP),&bmp);
    int nChannels = bmp.bmBitsPixel == 1 ? 1 : bmp.bmBitsPixel/8 ;

    // get depth color bitmap or grayscale
    int depth = bmp.bmBitsPixel == 1 ? IPL_DEPTH_1U : IPL_DEPTH_8U;

    IplImage* img = cvCreateImageHeader( cvSize(bmp.bmWidth, bmp.bmHeight), depth,
        nChannels );

    // Copy bitmap data to IplImage
    img->imageData = (char*)malloc(bmp.bmHeight*bmp.bmWidth*nChannels*sizeof(char));

    memcpy(img->imageData,(char*)(bmp.bmBits),bmp.bmHeight*bmp.bmWidth*nChannels);

    return img;
}

但这完美无缺:

int a[10];
int b[10];
memcpy(a, b, 10);

1 个答案:

答案 0 :(得分:1)

GetObject不会返回bmBits成员的有效指针 - 它只会填充结构的其他成员。

您需要使用类似GetDIBits的内容。