我目前正在开发一种实时数据绘图解决方案,该解决方案能够频繁接收新数据(高达1kHz)并以较低的速率(例如50hz)执行重绘。我使用FLTK进行了第一次实现,但我想尝试一下GTK,因为我以前从未使用过它,它看起来对我来说很有希望。
为了简短起见,我注意到与我使用FLTK测量的结果相比,在绘制线条时调用cairo_stroke()需要花费很多时间(FLTK中没有笔划,fust一个fl_line()函数)。我试图限制尽可能多的笔划,但使用GTK,渲染时间仍然延长了5-7倍。
有没有人注意到在绘图区域上绘制期间使用GTK / Cairo时出现这样的性能问题?关于在哪里寻找以减少绘图持续时间的任何线索?
注意:后端(要绘制的线条和文本的计算)是完全相同的,因为它是在一个公共基类中执行的。
我有一个Gtk/Carlo绘图库https://github.com/pchilds/GtkPlot
在我制作它的时候,我是为绘制大型数据集(10k)而设计的。缺点是代码非常难以维护,被优化得令人作呕。但它确实起到了作用。我没有研究刷新率,但它可能能达到这个水平。据我所知,我没有划每一行,但我可能错了。如果点连接在一起,你可以创建一条路径,一次划完它们。
我还没有研究FLTK进行比较。
亚历山大提到OpenGL就是一个好的。你也可以看看cairo的wayland后端。Wayland是X的替代品,它使用OpenGL。
开罗绘画确实不是很快。有两个主要瓶颈:“绘制”信号发出的频率和cairo如何在引擎盖下绘制线条。
cairo_line_to是一种非常聪明的绘制方法,它使用抗锯齿、颜色混合、透明度等绘制线条,并且以精确的像素(坐标是两倍的,因此一条1px的垂直线可以占用两个像素)
据我所知,有两种方法可以让绘图更快:
< li >使用OpenGL < li >在图像表面上自定义线条绘制(< code > cairo _ image _ surface _ get _ data
并逐像素绘制图像)
当然,还要优化您执行的抽牌次数,但这不太具有可扩展性。
所以,我想用PyCairo绘制一个图像。效率非常重要,但我使用PyGtk的gtk.gdk.Pixbuf加载图像。我的问题是,通过gtk.gdk检索开罗上下文来呈现Pixbuf是否有性能差异。CairoContext与将Pixbuf转换为cairo的对比。ImageSurface对象,如果是,差异有多大?这是在一个单独的绘图线程中运行的,该线程每秒更新30次左右(但仅当图像需要更新时)。请注意,转换
在GDK/GTK中检索开罗上下文的机制已损坏和/或在文档中未正确描述。我正在尝试从按钮按回调中绘制Gtk绘制区域,但没有成功。文档建议做 然后用开罗的语境画画,然后在 所有这些似乎都适用于GTK 3.22.30(和cairo 1.15.12),但不适用于GTK3.24.30(和cair 1.16.0)。显然有些事情已经改变了。知道吗?下面是一个完整的例子:
问题内容: 我以两个数组获取一些数据:一个用于时间,另一个用于值。当我达到1000点时,我会触发信号并绘制这些点(x =时间,y =值)。 我需要保持与之前相同的图形,但只有一个合理的数字才能避免减慢处理速度。例如,我想在图表上保留10,000点。matplotlib交互式绘图工作正常,但是我不知道如何删除第一个点,这会很快减慢计算机速度。我查看了matplotlib.animation,但它似乎
问题内容: 我有一个应用程序,该应用程序每秒更新一次变量约5到50次,并且我正在寻找某种实时绘制此变化的连续XY图的方法。 尽管不建议使用JFreeChart来获得如此高的更新速率,但是许多用户仍然说它适用于他们。我尝试使用此演示并将其修改为显示随机变量,但似乎一直都在使用100%的CPU。即使我忽略了这一点,我也不希望限于JFreeChart的ui类来构造表单(尽管我不确定其功能到底是什么)。可
问题内容: 我正在编写Java 2D游戏。我正在使用内置的Java 2D图形库,在我从BufferStrategy中从JFrame(有时是全屏)的Canvas中从BufferStrategy获取的Graphics2D上进行绘图。BufferStrategy是双缓冲的。重涂是通过计时器主动完成的。我遇到了一些性能问题,尤其是在Linux上。 Java2D有很多创建图形缓冲区和绘制图形的方式,我只是不
我在java中创建了一个2D游戏,并试图将其分辨率提高到60 fps,分辨率为1920x1080像素。我的游戏逻辑在不到1毫秒的时间内表现良好。但是绘图需要超过10毫秒。在我相当强大的台式机(英特尔i5-4670K@3.40Ghz)上这可能就足够了,但是在我的笔记本电脑(英特尔i5-6300HQ@2.30Ghz)上,游戏已经慢了很多。绘图分为两个主要步骤: > 将游戏的每个部分绘制到Buffere