我想把一幅图片缩小,以1:2的比例显示出来,代码如下: //加载图片
HBITMAP bmp=(HBITMAP)::LoadImage(0,"c:\\1.bmp",IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION |LR_DEFAULTSIZE |LR_LOADFROMFILE);
CDC dc1,dc2;
dc1.CreateCompatibleDC(NULL);
//把图片选进dc1
dc1.SelectObject(bmp);
dc2.CreateCompatibleDC(NULL);
//把dc1中的图片内容以1:2缩小后放进dc2
if(NULL==TransparentBlt(dc2.m_hDC,0,0,300,200,dc1.m_hDC,0,0,600,400,RGB(0,0,255)))
AfxMessageBox("缩小图片时失败。");
//得到界面上静态文本框控件的指针
CWnd *pwnd=GetDlgItem(IDC_STATIC);
CDC* dc3=pwnd->GetDC();
//把dc1中的部分图片内容显示在界面上,这个没有问题
//dc3->BitBlt(0,0,300,200,&dc1,0,0,SRCCOPY);
//显示dc2中的图片内容,问题在这里:为何什么也不显示???????????
dc3->BitBlt(0,0,300,200,&dc2,0,0,SRCCOPY);

解决方案 »

  1.   

    没用过TransparentBlt,但位图的缩放显示可以用StretchBlt直接显示原bmp,用不着修改
      

  2.   

    谢谢楼上的,可StretchBlt没法指定透明色,而且我把上面代码:
    TransparentBlt(dc2.m_hDC,0,0,300,200,dc1.m_hDC,0,0,600,400,RGB(0,0,255))
    换成:
    StretchBlt(dc2.m_hDC,0,0,300,200,dc1.m_hDC,0,0,600,400,PATCOPY);
    结果也同样是什么也没显示。是不是我的内存DC2有什么不对?
      

  3.   

    我用下面代码直接把dc1中的内容1:2缩小,则可以实现显示:
    TransparentBlt(dc3->m_hDC,0,0,300,200,dc1.m_hDC,0,0,600,400,RGB(0,0,255));为什么中间再多一个dc就不行了呢?我想用双缓存,所以这个dc2不能省去,请多多指点呀!解决的话,我结贴前会再加分的,感激不尽!!
      

  4.   

    感谢楼上Mackz(在相互)的指点,我给dc2选进一个位图后果然可以了。不过我发现选进的位图不能比你后面要TransparentBlt进去的图片小,否则TransparentBlt进去的图片就只是部分内容,即只有先前选进去位图的大小。
    晚上回去再结贴。
      

  5.   

    jf,dc2都没SelectObject怎么能BitBlt呢?还有可以解决你的问题,就是当dc2去CreateCompatibleDC时,指定你最终要的大小那么后来TransparentBlt进去的图片就不会只是部分了.