我需要使用具有不同变换矩阵的图形对象绘制图元。我想知道我应该处理矩阵或图形会为我做这件事:
using (var g = Graphics.FromImage(...))
{
... some code ...
var tmp = g.Transform;
g.TranslateTransform(...);
... some code ...
g.Transform = tmp;
// should I call tmp.Dispose() here?
tmp.Dispose();
... some code that use g ....
}
http://msdn.microsoft.com/en-us/library/system.drawing.graphics.transform.aspx
表示:
因为返回的矩阵和Transform属性 是几何变换的副本,你应该处理 当你不再需要矩阵的时候。
g.Transform = tmp;
之后我不需要它,我应该处理它吗?
答案 0 :(得分:2)
引用MSDN,Graphics.Transform ...
获取或设置几何的副本 世界的变革 图形。
(强调我的。)
当你致电Transform
时,你正在复制Matrix,你应该自己处理它。只要您拥有它们,最好配置实现IDisposable
的对象,最好使用using(...)
语法。
答案 1 :(得分:2)
浏览Reflector我看到Matrix
结构体引用了原生矩阵
public sealed class Matrix : MarshalByRefObject, IDisposable
{
// Fields
internal IntPtr nativeMatrix;
...
并且在调用Disposed()
时
private void Dispose(bool disposing)
{
if (this.nativeMatrix != IntPtr.Zero)
{
SafeNativeMethods.Gdip.GdipDeleteMatrix(new HandleRef(this, this.nativeMatrix));
this.nativeMatrix = IntPtr.Zero;
}
}
所以答案肯定是肯定的。
答案 2 :(得分:0)
我会说是的。使用IDisposable总是有原因的。在这种情况下,手册也说了。 请记住,在处理一次性用品时,您可以使用“使用”语法。
答案 3 :(得分:0)
如果它实现了IDisposable,你必须在完成后处理它(我不明白为什么需要处理矩阵,但这无关紧要。)