2011-01-21 96 views

回答

1

这里是你如何做到这一点。

1)创建一个新的目标与源图像的尺寸的IplImage对象(GdiPlus ::位图)

2.)使用lockbits

3.获取源图像的​​PixelData取出把手)复制源PixelData取出的目标图象 - 源图像的

4)UnlockBits

0

难度在于Gdiplus :: Bitmap理论上支持很多奇特的像素格式,所以完全一般而言,转换将是冗长的。但基本情况如下:

IplImage* GdiPlusBitmapToOpenCvImage(Gdiplus::Bitmap* bmp) 
{ 
    auto format = bmp->GetPixelFormat(); 
    if (format != PixelFormat24bppRGB) 
     return nullptr; 

    Gdiplus::Rect rcLock(0, 0, bmp->GetWidth(), bmp->GetHeight()); 
    Gdiplus::BitmapData bmpData; 

    bmp->LockBits(&rcLock, Gdiplus::ImageLockModeRead, format, &bmpData); 

    int buffSz = bmpData.Stride * bmpData.Height; 
    int depth = 8, channel = 3; 
    IplImage* cvImage = cvCreateImage(CvSize(rcLock.Width, rcLock.Height), depth, channel); 
    const unsigned char* src = static_cast<unsigned char*>(bmpData.Scan0); 
    std::copy(src, src + buffSz, cvImage->imageData); 

    bmp->UnlockBits(&bmpData); 
    return cvImage; 
}