绘图坐标系问题
来源:互联网 发布:柴田胜家 知乎 编辑:程序博客网 时间:2024/06/04 19:28
绘图坐标系问题
1.逻辑坐标
逻辑坐标是独立于设备的,它与设备点的大小无关。使用逻辑单位,是实现"所见即所得"的基础。当程序员在调用一个画线的GDI函数LineTo,画出25.4mm(1英寸) 长的线时,他并不需要考虑输出的是何种设备。若设备是VGA显示器,Windows自动将其转化为96个像素点;若设备是一个300dpi的激光打印机,Windows自动将其转化为300个像素点。
2.设备坐标
Windows将GDI函数中指定的逻辑坐标映射为设备坐标,在所有的设备坐标系统中,单位以像素点为准,水平值从左到右增大,垂直值从上到下增大。
Windows中包括以下3种设备坐标,以满足各种不同需要:
(1)客户区域坐标,包括应用程序的客户区域,客户区域的左上角为(0,0)。
(2)屏幕坐标,包括整个屏幕,屏幕的左上角为(0,0)。屏幕坐标用在WM_MOVE消息中(对于非子窗口)以及下面的Windows函数中:CreateWindow和MoveWindow(都对于非子窗口)、GetMessage、GetCursorPos、GetWindowRect、WindowFromPoint和SetBrushOrg中。用函数ClientToScreen和ScreenToClient可以将客户区域坐标转换成屏幕区域坐标,或反之。
(3)全窗口坐标,包括一个程序的整个窗口,包括标题条、菜单、滚动条和窗口框,窗口的左上角为(0,0)。使用GetWindowDC得到的窗口设备环境,可以将逻辑单位转换成窗口坐标。
3.逻辑坐标与设备坐标的转换方式
映射方式定义了Windows如何将GDI函数中指定的逻辑坐标映射为设备坐标。要继续讨论映射方式我们要介绍Windows有关映射模式的一些术语:我们将逻辑坐标所在的坐标系称为"窗口",将设备坐标所在的坐标系称为"视口"。
"窗口"依赖于逻辑坐标,可以是像素点、毫米或程序员想要的其他尺度。
"视口"依赖于设备坐标(像素点)。通常,视口和客户区域等同。但是,如果程序员用GetWindowDC或CreateDC获取了一个设备环境,则视口也可以指全窗口坐标或屏幕坐标。点(0,0)是客户区域的左上角。x的值向右增加,y的值向上增加。
对于所有映射模式,Windows都用下面两个公式将窗口坐标转换成视口坐标:
xViewport=(xWindow-xWinOrg)*(xViewExt/xWinExt)+xViewOrg
yViewport=(yWindow-yWinOrg)*(yViewExt/yWinExt)+yViewOrg
其中,(xWindow,yWindows)是待转换的逻辑点,(xViewport,yViewport)是转换后的设备点。如果设备坐标是客户区域坐标或全窗口坐标,则Windows在画一个对象前,还必须将这些坐标转换成屏幕坐标。
这两个公式使用了分别指定窗口和视口原点的点:(xWinOrg,yWinOrg)是逻辑坐标的窗口原点;(xViewOrg,yViewOrg)是设备坐标的视口原点。在缺省的设备环境中,这两个点均设置为(0,0),但它们可以改变。此公式意味着,逻辑点(xWinOrg,yWinOrg)总被映射为设备点(xViewOrg,yViewOrg)。
Windows还能将视口(设备)坐标转换为窗口(逻辑)坐标:
xWindow=(xViewport-xViewOrg)*(xWinExt/xViewExt)+xWinOrg
yWindow=(yViewport-yViewOrg)*(yWinExt/yViewExt)+yWinOrg
可以使用Windows提供的两个函数DPtoLP和LPtoDP在设备坐标及逻辑坐标之间互相转换
- 绘图坐标系问题
- 关于ios绘图坐标系问题
- IOS 绘图坐标系颠倒问题
- 绘图坐标系与视点坐标系
- Canvas坐标系与绘图坐标系
- MFC 绘图坐标系
- 绘图程序中的坐标系应用
- R绘图系统中的坐标系
- Win8 Canvas 绘图时 坐标系翻转
- GDI绘图坐标系映射的理解
- Qt5功能包之绘图系统--坐标系
- MATLAB绘图确定坐标系的显示范围
- iOS绘图时,什么时候需要转换坐标系
- QT 利用QPainter绘图的坐标系转换
- matlab 对数坐标系绘图函数
- Cocos2D中坐标系问题
- 坐标系相关问题
- 迷宫问题-坐标系解法
- 在Watir中调用JavaScript脚本
- TCPMP 源代码分析2
- 细说UI线程和Windows消息队列
- 同一个用户在不同页面共享数据的常用方法
- 使用vector::reserve来避免不必要的重新分配
- 绘图坐标系问题
- 在Linux下修改环境变量PATH
- 嗯,自己写的一个,第一次啊第一次!
- elf文件分析
- SFX资金存取
- vim+cscope使用推荐参考
- January, 24
- SFX资金存取
- 【转】模式窗口window.open造成Session丢失的解决方法