补充:
1,STATIC控件我先用蓝色画刷涂了底色,所以执行效果中下半段是蓝色的
2,从内存DC拷贝到视图DC的命令如下:
m_pDC->BitBlt(0,0,rect.right,rect.bottom,&m_memDC,0,0,SRCCOPY);
第二个参数是目标DC的Y坐标,个人感觉这里应该是0,因为我并没有改变逻辑坐标呵,当然应该从Y=0的位置开始覆盖呵,但是实际效果貌似并非如此,这是为什么呢?
3,为什么内存DC里负数部分没有被画出来?
数学坐标到屏幕坐标的转换
垂直坐标反相,然后再把原点移动到你要绘图的坐标处.(x1,y1)
(x,y)--(x+x1,-y+y1)
但是,按这个移动,会发现坐标系是图是反的,相当于原来的对于x轴镜像.
想要坐标系不同,而显示又符合,那么实际坐标系变换就简单了,
就相当于把第一,四像限的图下移到二,三像限.
//绘制坐标X轴.
POINT ps = {100,200};
dc.MoveTo(ps);
ps.x = 500;
ps.y = 200;
dc.LineTo(ps);
for(double i=0; i<360; i+=1.0f)
{
int y = sin(i*3.14159f/180.0f)*100.0f; //把0-1扩展到0-100;
int x = (int)i;
dc.SetPixel(x+100, -y+200, RGB(255,0,0)); //原点移动到屏幕 100,200处
}
数学坐标到屏幕坐标的转换
垂直坐标反相,然后再把原点移动到你要绘图的坐标处.(x1,y1)
(x,y)--(x+x1,-y+y1)
但是,按这个移动,会发现坐标系是图是反的,相当于原来的对于x轴镜像.
想要坐标系不同,而显示又符合,那么实际坐标系变换就简单了,
就相当于把第一,四像限的图下移到二,三像限.
//绘制坐标X轴.
POINT ps = {100,200};
dc.MoveTo(ps);
ps.x = 500;
ps.y = 200;
dc.LineTo(ps);
for(double i=0; i<360; i+=1.0f)
{
int y = sin(i*3.14159f/180.0f)*100.0f; //把0-1扩展到0-100;
int x = (int)i;
dc.SetPixel(x+100, -y+200, RGB(255,0,0)); //原点移动到屏幕 100,200处
}
谢谢,当然我也可以单纯的先把我的源数据做一个坐标系转换,然后目标DC和内存DC不做任何变换直接画图,这样也没问题,可是我更想知道GDI下的那几个坐标变换函数的用法。。bitblt。
谢谢各位回答,做了N次实验,终于找到点规律了,总结如下,如有错误,烦请指正
1,pDC做了坐标变换以后,memDC也要做相应的坐标变换(为了保持一致)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-27469-2.html
俺们那的人大部分谈生意都很实诚
2的不会卡