最近在做关于这个的项目,那么,比如打开文件,要自己写,还是要直接用现有的代码,现有的代码是打开bmp图的,用他的又不知道是什么原理,那接下来什么阈值变换什么的要怎么做,想自己想,又不知道如何下手,大家如果碰到这种项目,是如何下手的?真心求助(IDE:VC++6.0 MFC制作)
PS:我想说应该可以打开任意格式图像的,可是真的不懂,有什么资料可以参考的吗?
PPS:MSDN的英文好痛苦

解决方案 »

  1.   

    用CImage类,可以加载多种格式的图片,它可以帮你转换成位图,至于获取位图数据,对像素处理,那就看你的实际应用了
      

  2.   

    用OPENCV啊,跟吃个豆芽菜一样容易 
      

  3.   

    CImage 可以满足基本的需求
      

  4.   

    我想请问下CImage类是要去哪找。。?
      

  5.   

    嗯。然后我自己用GDI写了
    可是用GDI打开BMP图像的时候  只要一移动图片文档框  或者最大化文档框,就直接挂了      调试错误在
    //将DIB在pDC所指向的设备上进行显示
    ::StretchDIBits(pDC->GetSafeHdc(), origin.x, origin.y, size.cx, size.cy,
    0, 0, m_lpBmpInfoHead->biWidth, m_lpBmpInfoHead->biHeight,m_pImgData,
     (LPBITMAPINFO) m_lpBmpInfoHead, DIB_RGB_COLORS, SRCCOPY);
    这是怎么回事啊?
      

  6.   

    移动窗体,系统要重绘,你这个函数写得有问题,读下MSDN,注意前四个是目的坐标参数,后四个是原图参数。根据你自己需要和处理流程,改一下。
      

  7.   

    这个是?
    CxImage应该是gdi+吧?
      

  8.   

    系统在窗体移动时,会发出消息,需要程序自己重新绘制,你程序中是否含有重绘响应函数?对你的origin有些疑问,是否正确使用了,给个我以前编的类似例子参考一下。希望有帮助CSplitView::OnDraw(CDC* pDC)
    {       CRect rect;
    GetClientRect(rect);
    CBrush brush_back;
     
    CBitmap m_bitmap;
    m_bitmap.LoadBitmap(IDB_BITMAP1);

    BITMAP bm;
    m_bitmap.GetObject(sizeof(BITMAP),&bm); CDC MemDC;
    MemDC.CreateCompatibleDC(pDC);
    CBitmap *pOldBitmap=MemDC.SelectObject(&m_bitmap);   pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
    MemDC.SelectObject(pOldBitmap);

    MemDC.DeleteDC();  
    pDC ->DeleteDC();   
            m_bitmap.DeleteObject();                                 
    ..................................
    }
      

  9.   

    调试模式
    出现
    Unhandled exception in "vc8.exe": 0xC0000005: Access violation