首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用双缓冲中断Graphics.PageScale

使用双缓冲中断Graphics.PageScale
EN

Stack Overflow用户
提问于 2015-01-11 22:37:03
回答 1查看 196关注 0票数 0

我有UserControl,并设置了折页样式:

代码语言:javascript
复制
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer, true);

我有OnPaint事件处理程序,它将Graphics.PageScaleGraphics.TranslateTransform()设置为设置地图位置和比例尺:

代码语言:javascript
复制
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被忽略了一样。

我遗漏了什么?这些方法不允许双缓冲吗?那我该怎么办?通过缩放和翻译每个数据点,手动缩放和翻译我的地图?它可以击败从双缓冲获得的大部分速度增益。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-12 04:15:37

通过缩放和翻译每个数据点,手动缩放和翻译我的地图?它可以击败从双缓冲获得的大部分速度增益。

您可以在画图处理程序之外缩放映射(每次重新计算视图时);这不会对性能造成太大影响,特别是如果您使用整数而不是浮动。

整数乘法非常快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27892885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档