CBitmap 类的 LoadBitmap 可以将一个位图资源文件加载到位图对象.
   如果我只想:
       将这个位图资源文件 指定的矩形区 来创建一个位图对象,
   怎么办?

解决方案 »

  1.   

    将图像读取到内存DC,再创建一个新的位图DC,将选取的矩形区画到新的DC中,重画时使用函数StretchBlt;
    原型:BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );
      

  2.   

      楼上的不得分!! 
     画到DC我会呀,但是,我要求画到 CBitmap 对象中,怎么做?
      

  3.   

       然后用
       CBitmap* GetCurrentBitmap( ) const;
      得到位图么??
      

  4.   

    ::CreateDIBSection创建位图,
    然后::SetDIBits
    再然后CBitmap::Attatch()
      

  5.   

        Load之后循环扫描制定区域,在定义一个CBitmap对象把得到的像素点存起来
        
        或者直接在指定区域显示像素点就好了
      

  6.   


    //自己写个函数吧,参数里传入源位图,新位图大小等信息
    CBitmap Func(....)
    {
    //用到的设备描述表句柄
    HDC hDC = ::GetDC(m_hWnd); 
    HDC hSourceDC = ::CreateCompatibleDC(hDC);
    HDC hDestDC = ::CreateCompatibleDC(hDC);
    //源位图对象
    CBitmap bmp;
    bmp.LoadBitmap(IDB_BITMAP1);
    HBITMAP hSourceBmp = (HBITMAP)bmp.m_hObject; //源位图句柄
    SelectObject(hSourceDC, hSourceBmp); //源位图选入内存

    int iWidth = 200, iHeight = 50; //目标位图的大小
    HBITMAP hDestBmp = ::CreateCompatibleBitmap(hDC, iWidth, iHeight); //新建位图 SelectObject(hDestDC, hDestBmp); //新位图选入内存

    int iSourceX = 20, iSourceY = 20; //源位图的左上角位置
    ::StretchBlt(hDestDC, 0, 0, iWidth, iHeight, hSourceDC, iSourceX, iSourceY, iWidth, iHeight, SRCCOPY); //位图对象
    CBitmap DestBmp; 
    DestBmp.Attach(hDestBmp);  //释放资源
    DeleteDC(hDC);
    DeleteDC(hSourceDC);
    DeleteDC(hDestDC); DeleteObject(hSourceBmp);
    DeleteObject(hDestBmp); return DestBmp;
    }
      

  7.   

    不好意思,上面有点错
    DeleteObject(hDestBmp); //新建的位图不能删,去掉这句