windows设备坐标和逻辑坐标的转换
設(shè)備坐標通俗的講就是我們看到的我們的視圖坐標,它包含屏幕坐標、窗體坐標和客戶區(qū)坐標,他們都是以窗體的左上角為準的坐標,并且是從左到右,從上到下的坐標
簡單總結(jié)一下他的特點:x坐標是從左到右,y坐標是從上到下的,原點坐標就是我們的屏幕左上角huo'zh餓我們的窗體左上角。
邏輯坐標就是我們繪圖需要參考的坐標系,所有的繪圖操作都是基于邏輯坐標來進行操作的,所以要制作繪圖軟件或者繪制我們想要的特效必須要了解一下邏輯坐標,也需要我們手動去設(shè)置我們自定義的邏輯坐標,再次基礎(chǔ)上完成漂亮的圖像。
首先說一下坐標系的轉(zhuǎn)換:
一組很中要的API,SetViewportExtEx和SetWindowExtEx,SetViewportExtEx是設(shè)定設(shè)備坐標系的坐標屬性,SetWindowExtEx是設(shè)定邏輯坐標的的坐標屬性,寫一個函數(shù)看不出我們想要的的效果,這兩個函數(shù)一定是成對使用,他們可以完成構(gòu)造設(shè)備坐標和邏輯坐標的的比例關(guān)系,然后設(shè)定完畢我們只需要改變我們的坐標映射模式SetMapMode使用MM_ISOTROPIC模式,我們再去繪制圖形,很快就會發(fā)現(xiàn),我們的圖形變化了,是按照我們設(shè)定的邏輯坐標比例進行繪圖的,最終完成的一個工作就是屏幕上的一個像素不是表示1,而是表示我們的設(shè)定比例。
有人會說,我們的坐標系很多都是從左到右,從下到上的啊,這樣才符合我們小時候在數(shù)學(xué)數(shù)上學(xué)到的坐標系樣式,不要急,上邊兩個API就可以完成這個操作,我們只用設(shè)定坐標類型的正負就可以構(gòu)造我們邏輯坐標的方向了,比如說SetViewportExtEx(hDC,2,2,NULL);SetWindowExtEx(hDC,1,-1,NULL);就把我們的邏輯坐標設(shè)定為相比設(shè)備坐標的兩倍,方向從左到右,從上到下的坐標了。
再來看看原點的問題把:
設(shè)備坐標和邏輯坐標的比例關(guān)系設(shè)定好了,邏輯坐標的方向也設(shè)定好了,那么我們的原點坐標不能總在屏幕左上角把,那樣很不舒服,還有兩個API可以完成這個問題,他們是SetViewportOrgEx和SetWindowOrgEx,這兩個函數(shù)完成邏輯坐標原點對應(yīng)設(shè)備坐標原點的位置,當然也可以只使用SetWindowOrgEx一個函數(shù),默認的邏輯坐標就是在屏幕左上角(0,0)的位置,比如說:SetWindowOrgEx(hDC,-100,-100,NULL);我們就把我們的邏輯坐標原點放在相對于視圖坐標(設(shè)備坐標)的(100,100)位置了,再次繪圖我們發(fā)現(xiàn)我們繪制的圖形偏移了,好了坐標轉(zhuǎn)換的基礎(chǔ)就這樣子了,其余的就是在這幾個api上發(fā)揮了。
轉(zhuǎn)載于:https://www.cnblogs.com/jiangu66/archive/2013/04/22/3036521.html
總結(jié)
以上是生活随笔為你收集整理的windows设备坐标和逻辑坐标的转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode—209. 长度最小的子
- 下一篇: java信息管理系统总结_java实现科