b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

bitblt_bitblt中源设备的像素_bitblt 透明(3)

电脑杂谈  发布时间:2017-01-20 00:03:24  来源:网络整理

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

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...