2,BitBlt中不管Src还是Des的X,Y坐标并不像MSDN中说的是逻辑坐标,而是变换后的相对坐标,比如BitBlt函数的第一,第二参数,MSDN中的定义是目标矩形的左上角,但是如果做了坐标变换,比如做了如下坐标变换:
//逻辑坐标系和设备坐标系比例1:1,Y轴方向相反 //设备坐标系原点设为(0, rect.bottom/2),也就是设备坐标系向下平移rect.bottom/2个单位。 m_pDC->SetWindowExt(rect.right, -rect.bottom);//设置窗口尺寸,逻辑单位 m_pDC->SetViewportExt(rect.right, rect.bottom);//设置视口尺寸,物理单位 m_pDC->SetViewportOrg(0, rect.bottom/2);//设置设备坐标原点
那这个时候要把memDC的图拷贝到pDC中是,BitBlt函数就应该这样写:
m_pDC->BitBlt(0, -rect.bottom/2,rect.right,rect.bottom,&m_memDC,0, -rect.bottom/2,SRCCOPY);
注意观察红色部分的参数,按照MSDN的解释,第一个红色参数应该是目标DC的左上角的逻辑Y坐标,因为在坐标变换中我并没有改动逻辑坐标的原点,所以我本来以为这里设置为0,但是实际操作下来如果设为0就错了,只有设为-rect.bottom/2才能正确动作,那这个-rect.bottom/2明显是一个负数,看上去其实更像设备坐标系下的坐标,而且是目标DC的 左下角的Y坐标,由此可以推断,如果你做了坐标变换,那么BitlBlt的坐标参数应该是 设备坐标系下的, 起始点的参数。bitblt换句话说,如果你设备坐标系的Y轴是向上的,那么X,Y就应该是左下角的坐标,而不是左上角的。不知道我说清楚了没有,自己都晕了,唉。。。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-27469-3.html
岂能被个别台独份子所左右
你读书读狗肚子里了
呵呵