我需要做一個間距爲12.5像素X和20像素Y(PICA尺度)的網格繪製大量。字體需要是特定的尺寸,線條仍然需要一個像素厚度。目前我將這些值保存在浮點數中並將它們相乘(例如,從第3行開始的文本,第6列繪製爲座標2f * cx,5f * cy)。我想通過使用縮放變換來避免所有這些不必要的倍增,但不幸的是,這些也會影響字體大小和線條粗細。有沒有辦法避免這種情況?或者,編譯器會默默地爲我做這個,因爲cx/cy值是常量嗎?C#縮放GDI位置,但不是字體大小或線條的粗細
3
A
回答
1
編譯器應該將表達式的常量部分減少爲單個常量,但由於float的值在編譯時並不知道,所以在運行時仍然必須乘法。因此,如果c是一個常量,(1 + 2 + c)* 6 * f可以被編譯器減少到n * f。
爲防止文本縮放,最好的方法是設置縮放轉換,繪製所有不關心維護最小線寬的非文本圖形,然後在不使用轉換的情況下繪製文本。您可以使用轉換來定位文本應該開始的位置,以免自己獨立計算 - 像LPtoDP(邏輯點到設備點)這樣的函數應該能夠實現這一點。
解決此問題的另一種方法是在變換中渲染文本,但對文本大小本身應用反向縮放。所以,如果變換縮小5%,則可以將字體縮小5%。這不會給出確切的結果,但可能足夠接近視覺效果。
6
...另外,如果您不希望縮放行,Microsoft已經爲我們留下了一些「黑客」。將線條的寬度設置爲0px,並將始終繪製單個像素厚度。
相關問題
- 1. 在ggpairs圖中減小線條粗細和'Corr:'字體大小
- 2. 控制字體粗細而不更改字體大小
- 3. 固定字體大小不受放大或縮小影響
- 4. OpenGL線條粗細
- 5. ImageView縮放不放大或縮小
- 6. GDI +字體大小差異
- 7. 下劃線文本 - 不同字體大小的交叉區域的線條粗細
- 8. C#AutoScaleMode字體,粗體控件不縮放
- 9. 隨機線條粗細-OpenCv
- 10. 更改線條粗細gtk_render_line
- 11. 縮小放大位圖或畫布
- 12. Android位圖/畫布放大或縮小
- 13. 將FontWeight設置爲粗體縮小文本大小
- 14. 停止放大或縮小網頁內容的位置
- 15. TextView字體大小自動縮放
- 16. Eclipse字體縮小和放大問題
- 17. Android WebView縮放字體大小
- 18. CSS字體大小縮放抖動
- 19. C#/ GDI圖形縮放(Drawline)
- 20. 允許SizeToContent放大但不縮小它
- 21. 放大或縮小相機
- 22. MySQL放大或縮小?
- 23. Openlayers放大或縮小
- 24. Phonegap縮放混亂和字體大小縮放
- 25. 包'樹形圖'中的線條粗細
- 26. 根據內容(CSS或JS)縮放字體大小
- 27. CCLayerPanZoom不會放大或縮小
- 28. TMUX放大或縮小,而不切換
- 29. 線條高度和字體大小
- 30. 如何根據div大小縮放字體大小?
在圖形類中是否有LPtoDP函數,還是我必須自己創建?有很多文本輸出,但我希望它儘可能快(它實際上屬於OnPaintBackground)並且方面不是1:1,所以我不認爲反向縮放會是一個不錯的選擇。 – Patrick 2010-12-07 20:25:18
LPtoDP是一個Win32 GDI API函數。在.NET圖形類中可能有類似的,不確定。 – dthorpe 2010-12-07 21:10:06