我一直在研究.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