English 中文(简体)
利用全球发展趋势+使用不同的科罗线的快速通道?
原标题:Fast way to draw lines using different Color using GDI+?
  • 时间:2010-01-14 06:47:40
  •  标签:
  • c#
  • .net
  • gdi+

我有一个动态的点子清单,可以在任何时候添加新的点。 我想用不同的颜色连接他们。 科罗依据的是这些要点的指数。 该守则是:

    private List<Point> _points;
    private static Pen pen1 = new Pen(Color.Red, 10);
    private static Pen pen2 = new Pen(Color.Yellow, 10);
    private static Pen pen3 = new Pen(Color.Blue, 10);
    private static Pen pen4 = new Pen(Color.Green, 10);

    private void Init()
    {
        // use fixed 80 for simpicity
        _points = new List<Point>(80);

        for (int i = 0; i < 80; i++)
        {
            _points.Add(new Point(30 + i * 10, 30));
        }
    }

    private void DrawLinesNormal(PaintEventArgs e)
    {
        for (int i = 0; i < _points.Count-1; i++)
        {
            if (i < 20)
                e.Graphics.DrawLine(pen1, _points[i], _points[i + 1]);
            else if (i < 40)
                e.Graphics.DrawLine(pen2, _points[i], _points[i + 1]);
            else if (i < 60)
                e.Graphics.DrawLine(pen3, _points[i], _points[i + 1]);
            else
                e.Graphics.DrawLine(pen4, _points[i], _points[i + 1]);
        }
    }

我认为,如果我有高速度的新点,这种方法还不够快。 是否有什么办法可以加快速度? 我曾进行过一些研究,有人说,使用图表可以更快,但如何?

[UPDATE] I 收集一些可能的优化:

  1. Using GrahpicsPath, Original Question
  2. Change Graphics quality ( such as SmoothingMode/PixelOffsetMode...), also call SetClip to specify the only necessary region to render.
问题回答

你们胜出的,不能在不失去质量或改用更快的放任者的情况下,使该守则的速度大大加快(国际移民组织、开放式移民组织、直接X)。 但是,全球发展指数往往要更快(可能为2x),而直接X/OpenGL可能要根据您的重新计算而更快(可能为10x)。

采用“途径”的想法是,你把许多条线(如你,20条)混为一谈,而不是说提炼20条。 只有当你能够将所输入的数据安排在正确的点名单格式中,以便进行例行计算时,这才会使你受益。 否则,你将不得不将各点复制到正确的数据结构中,这将浪费你通过打扫道路而获得的许多时间。 就呼吸系统而言,你可能不得不从一系列的点上制作一部图表,从而不会节省时间。 但是,如果你不得不不止一次地走同一道路,你就可以走这条道路,然后可以看到净收益。

如果在清单中添加新点,但老点不去掉(即,你总是在显示线上添加新线),那么你就能够使用一张屏幕图,储存迄今为止所提供路线。 每次增加点时,请上one<>m>>,而不是每次抽出80条线。

这完全取决于你重新努力做什么。

是否真正有助于改进业绩,但将费用列入清单,以这样方式撰写所有内容:

int ratio = _points.Count / _pens.Count;

for (int i = 0; i < _points.Count - 1; i++)
{
    e.Graphics.DrawLine(_pens[i / ratio], _points[i], _points[i + 1]);
}

这与你恢复系统一样快。 引文。 您可能会看到使用<代码>Graphics.DrawLines()的增益,但您需要以不同的方式编排您的数据,以便一劳永逸地利用同一个笔。 我对<代码>GraphicsPath表示严重怀疑。

提高速度的一个可靠办法是降低产出的质量。 Graphics. InterpolationMode to InterpolationMode.Low, Graphics.Compositing Quality to Compositing Quality.HighSpeed , ,>-code>.SmoothingMode.HighSpeed,Graphics.PixelOffsetMode/code tocode>

I记住,一旦有人将图象与P/Invoke比较为全球空间数据基础设施的例行工作,就会出现快速测试,而P/Invoke的快速速度则非常令人惊讶。 您可以检查。 我很想知道,如果我能找到这种比较的话:,这显然是《契约框架》的,因此它可能没有资格要求《契约框架》。

另一种出路是使用直接2D,如果你拥有适当的硬件,则这种直接2D可以比全球发展趋势更快。

时间太晚,但也许有些人仍需要解决办法。

I ve 创建了GLGDI+小图书馆,有传真机(但并非完整/相等)GDI+ syntax,该图书馆在开放TK运行:

我不敢肯定稳定,但有一些问题有待确定(与开放图瓦卢文稿有关的问题)。 但是,如果你需要提高工作效率(如我的级别编辑),就可以解决问题。

你可能会把大麻 look放在碎物上,而且你从全球发展指数+方案获得近乎实时的表现,但只要地貌和物体数量保持在合理的界限内,你就可以轻易地保持体面的ps。 关于线图,我看不出为什么。

但是,如果你达到你认为是最佳的点,那么你就应考虑不同的图表,如果你愿意的话。 NET, 但有诸如开放式GL和直接X等未经管理的转机问题,与世界森林基金或银灯交接,它的力量很大。

不管怎么说,你可以尝试建立一套系统:Drawing2D.GraphicsPath,然后使用一个系统:Drawing2D.Path GradientBrush,以这种方式应用肤色。 这是一种单一的缓冲呼吁,如果你能够从中获取足够的业绩的话。 你们不得不与完全是全球发展指数+以外的东西打交道。

并不是全球发展趋势(+)而是解决这一问题的一个完全不同的方式,可能是与记忆的一块块一道工作,把你的界线推到这里,将其转换成“条码”(,反对当你需要展示你的线。

当然,这取决于快速途径

  • draw lines of given color in the memory representation of choice and
  • convert that to the Bitmap to show.

页: 1 NET 框架,我想,但也许在第三方图书馆? http://kodierer.blogspot.com/2009/12/writeablebitmapex-writeablebitmap.html (尚未......)

至少可能是解决这一问题的箱子。 希望会有所助益。

I think you have to dispose pen object and e.Graphics object after drawing. One more thing it is better if you write your drawLine code inside onPaint().

 just override onPaint() method it support better drawing and fast too.




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...