这个比较简单啊!首先,你应该了解位图的储存格式,也就是bmp文件的文件格式。然后知道x,y坐标的话,在从这个坐标开始拷贝数据块,就可以了,所以你还是先去看看bmp文件格式吧!

解决方案 »

  1.   

    2 hoco:難道沒有簡單的通過DC來達到此功能的方法嗎?
      

  2.   

    事实上,直接拷贝数据块速度快, BMP 图像的数据格式是很简单的.你可以只从文件中读取制定位置的图像的数据,这是你可以使用一个极大的图像,而不用将整个图像度如内存.
      

  3.   

    我寫了一段代碼,但截出的CBitmap畫出來去是個黑塊,大家幫忙看看問題在哪里(高手勿笑) CDC * pDC=this->GetDC();
    CBitmap srcBmp,tagBmp;
    srcBmp.LoadBitmap(IDB_PIC);
    CDC memSrcDC,memTagDC;
    memSrcDC.CreateCompatibleDC(pDC);
    CBitmap * pOld=memSrcDC.SelectObject(&srcBmp); memTagDC.CreateCompatibleDC(&memSrcDC);
    memTagDC.BitBlt(0,0,14,14,&memSrcDC,0,0,SRCCOPY); tagBmp.CreateCompatibleBitmap(&memTagDC,14,14);
    this->Draw(tagBmp); memSrcDC.SelectObject(pOld);
    memSrcDC.DeleteDC();
    memTagDC.DeleteDC();
    this->ReleaseDC(pDC);其中this->Draw(CBitmap&)是我用來畫截出的bmp的,此處不表
      

  4.   

    错错错。
    要这样才行:
    CDC * pDC=this->GetDC();
    CBitmap srcBmp,tagBmp;
    srcBmp.LoadBitmap(IDB_PIC);
    CDC memSrcDC,memTagDC;
    memSrcDC.CreateCompatibleDC(pDC);
    CBitmap * pOld=memSrcDC.SelectObject(&srcBmp);tagBmp.CreateCompatibleBitmap(pDC,14,14);
    // here change 
    memTagDC.CreateCompatibleDC(&memSrcDC);
    memTagDC.BitBlt(0,0,14,14,&memSrcDC,0,0,SRCCOPY);//tagBmp.CreateCompatibleBitmap(&memTagDC,14,14);
    this->Draw(tagBmp);memSrcDC.SelectObject(pOld);
    memSrcDC.DeleteDC();
    memTagDC.DeleteDC();
    this->ReleaseDC(pDC);
      

  5.   

    2 erehw(疯狂CS):不行呀,照你的代碼我截出的仍是一個黑塊,沒有東西。是哪里出錯樂?
      

  6.   

    To :chief 你肯定自己弄错点什么了。
    仔细看看吧。
    实在不行,我发一个例子给你。
      

  7.   

    你看看CDC这个类
    CDC可以SelectObject( CBitmap * bmp );
    这样这个CDC的“内容”就是这个图象了。CDC之间可以Bitblt,就是图象的Copy。你明白了吧