GDI+ 的 Graphics 提供了一个 PageScale 属性, 用来设置Graphics 单位对页面单位的转换比率. 理论上可以用来做有缩放(Zoom )功能的绘图, 我一开始也是这么想的, 后来发现虽然绘图单位放大了, 可是对字体大小无视, 也就是说字体大小没有作用. 不过这也不是很严重的问题, DrawString 的时候重新按比例构造一个Font 就可以了. 要命的问题是---------
PageScale 不支持双缓冲(Double-Buffer )!!
其实是不支持指向内存位图(Bitmap)的Graphics. 不论是自己构造一个Bitmap 做双缓冲, 还是直接把Control.SetStyle(ControlStyles.OptimizedDoubleBuffer, true) , 此时的 PageScale 都不发挥任何作用.
找来找去, 有些洋人也提出了这个问题, 后来发觉, 弄来弄去, 做Zoom, 还是矩阵转换来得实在. 对于提到矩阵就头大的我来说, .net 的GDI+ 提供了一个简单的方法 ScaleTransform 实现了这个功能. 当然, 如果需要更高级的矩阵转换, 可以用 MultiplyTransform 方法.