我一直在研究.NET中的一些GDI +代码,并且一直在努力学习我的课程。简单的事情如:
......等等。我相信有经验的人可以添加更多内容。
在使用GDI +或任何图形库时,要遵循哪些好的规则?
每个帖子一个有用的提示会很好。感谢。
答案 0 :(得分:5)
尽可能晚地创建对象(不要过早地优化/缓存)并尽早释放它们(如果IDisposable,则调用Dispose或wrap in using statement)。
答案 1 :(得分:2)
不要避免使用非托管呼叫,正确完成后可以加快速度。
答案 2 :(得分:2)
在逻辑/屏幕坐标之间进行转换时要小心。如果在错误的时间完成,你可能会耗尽精确度,并获得一些讨厌的绘图工件。
最后一次,我试图计算逻辑坐标中的新点;那些已经接近精确度的极限,所以新的观点并不是人们所希望的。转换更快修复它。
通过过早转换为屏幕坐标可能会出现类似的问题,尽管允许您传递浮点坐标(GDI +所做的)的API往往会更加强大。
答案 3 :(得分:2)
不要画得比你多。
通常,绘图操作比您将要执行的其他计算更昂贵(特别是在GDI +中,这是一个很好的API但不是最快的绘图库)。在你自己的代码中花费更多的时间来避免不必要的绘图操作(例如,不止一次地绘制相同的东西)通常是值得的。
答案 4 :(得分:2)
GDI陷阱让我烧了几次。
答案 5 :(得分:1)
并非严格意义上的GDI +问题,但要记住这一点,以节省几个小时的调试时间:
我在.NET中经常使用GDI +的一个错误是在Matrix
对象的Transform
属性上调用Graphics
方法。示例(在C ++ / CLI中):
g->Transform->Translate(100.0f, 250.0f); // WRONG. Will not have any effect.
Transform
属性的getter只返回矩阵的副本。因此,调用此副本的任何方法都不会影响图形转换的值。要操作图形转换,请调用其中一个包装器方法(MultiplyTransform
,TranslateTransform
,ScaleTransform
等),如下所示。
g->TranslateTransform(100.0f, 250.0f);
答案 6 :(得分:1)