我一直在研究.NET中的一些GDI +代碼,並一直在努力學習我的教訓。喜歡簡單的事情:GDI中的經驗法則+
- 什麼在屏幕上看起來不錯可以不看在紙上不錯,反之亦然
- 緩存對象太多可能會導致一個OutOfMemoryException
- 浮標可能不準確,
...等等。我相信經驗豐富的人可以增加更多。
當使用GDI +或任何圖形庫時,遵循什麼規則?
每篇文章一個有用的提示將很好。謝謝。
我一直在研究.NET中的一些GDI +代碼,並一直在努力學習我的教訓。喜歡簡單的事情:GDI中的經驗法則+
...等等。我相信經驗豐富的人可以增加更多。
當使用GDI +或任何圖形庫時,遵循什麼規則?
每篇文章一個有用的提示將很好。謝謝。
儘可能晚地創建對象(不要過早地優化/緩存)並儘早釋放它們(調用Dispose或使用IDisposable語句封裝)。
不要避免使用非託管調用,它可以加快正確完成了很多事情。
當您在邏輯/屏幕座標之間進行轉換時,小心謹慎。如果在錯誤的時間完成,你可能會用完精確度並得到一些令人討厭的繪圖工件。
最後一次這個位我,我試圖計算一個新的邏輯座標點;那些已經接近精度的極限了,所以新的觀點並不完全符合人們的希望。儘快進行轉換修復。
雖然API允許您將浮點座標傳遞給GDI +,但通過轉換到屏幕座標的速度可能會很快,但可能會出現類似的問題。
不要畫得比你更多。
一般來說,繪圖操作比您要執行的其他計算(尤其是在GDI +中,這是一個很好的API,但不是最快的繪圖庫)要貴。花更多時間在自己的代碼中避免不必要的繪圖操作(例如,多次繪製相同的東西)通常是非常值得的。
GDI Gotchas已經燒了我幾次。
不是嚴格意義上的GDI +問題,但記住這保存自己幾個小時的調試:
一個錯誤我犯了過於頻繁地使用GDI +在.NET中是調用的Transform
財產Matrix
方法Graphics
對象。實施例(在C++/CLI):
g->Transform->Translate(100.0f, 250.0f); // WRONG. Will not have any effect.
的Transform
屬性的吸氣劑只返回矩陣的拷貝。因此,在此副本上調用的任何方法都不會影響圖形變換的值。要操作圖形變換,請調用其中一種包裝方法(如下所示)(MultiplyTransform
,TranslateTransform
,ScaleTransform
等)。
g->TranslateTransform(100.0f, 250.0f);
[在GDI + XY值硬限制(http://stackoverflow.com/questions/3468495) – 2010-08-12 17:51:28