我有UserControl,并设置了折页样式:
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer, true);我有OnPaint事件处理程序,它将Graphics.PageScale和Graphics.TranslateTransform()设置为设置地图位置和比例尺:
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
if (Splines == null) return;
var pens = new[] {
new Pen(TrackColor),
new Pen(TrackColor),
new Pen(RoadColor),
new Pen(RiverColor),
new Pen(CrossColor)
};
var b = Splines.Bounds;
Graphics g = e.Graphics;
g.PageScale = _CurrentScale;
g.TranslateTransform(-b.Left, -b.Top);
foreach (var s in Splines) {
if (s.L) g.DrawLine(pens[s.T], s.A, s.D);
else g.DrawBezier(pens[s.T], s.A, s.B, s.C, s.D);
}
foreach (var p in pens) p.Dispose();
}在没有双缓冲的情况下,它可以像预期的那样工作,但是非常慢。双缓冲根本不起作用,我只知道背景。
当我禁用Graphics.TranslateTransform()时,我会得到未缩放的地图。就像Graphics.PageScale被忽略了一样。
我遗漏了什么?这些方法不允许双缓冲吗?那我该怎么办?通过缩放和翻译每个数据点,手动缩放和翻译我的地图?它可以击败从双缓冲获得的大部分速度增益。
发布于 2015-01-12 04:15:37
通过缩放和翻译每个数据点,手动缩放和翻译我的地图?它可以击败从双缓冲获得的大部分速度增益。
您可以在画图处理程序之外缩放映射(每次重新计算视图时);这不会对性能造成太大影响,特别是如果您使用整数而不是浮动。
整数乘法非常快。
https://stackoverflow.com/questions/27892885
复制相似问题