Python 实现缩放到开罗绘制的画布最有效的方法是什么?

Python 实现缩放到开罗绘制的画布最有效的方法是什么?,python,wxpython,cairo,Python,Wxpython,Cairo,我有一个wx.scrolled窗口,其中使用cairo绘制。我已经实现了缩放功能,现在可以重画整个内容。 但是,由于绘制曲线多达200条,所以我应该考虑一种更具性能的解决方案。 我想到了这些: 为缩放因子-1/+1缓冲图像(占用内存) 使用librsvg和缓冲一个SVG图像(我读过一些关于这个的文章。librsvg也在Windows下工作吗?) 在绘制曲线组后存储cairo.Context,并在缩放时恢复它(只是一个想法..这可能吗?) 还有其他可能性吗?最好的解决方案是什么 非常感谢这并不

我有一个
wx.scrolled窗口
,其中使用
cairo
绘制。我已经实现了缩放功能,现在可以重画整个内容。 但是,由于绘制曲线多达200条,所以我应该考虑一种更具性能的解决方案。 我想到了这些:

  • 为缩放因子-1/+1缓冲图像(占用内存)
  • 使用librsvg和缓冲一个SVG图像(我读过一些关于这个的文章。librsvg也在Windows下工作吗?)
  • 在绘制曲线组后存储cairo.Context,并在缩放时恢复它(只是一个想法..这可能吗?)
还有其他可能性吗?最好的解决方案是什么


非常感谢

这并不是对你问题的具体回答,但我也遇到了同样的问题,我刚刚切换到已经实现了缩放和平移功能的地方。我不确定它是否超性能。我觉得我的程序以前运行得比较顺利。
我也尝试过使用floatcanvas2,但对它们都不太满意。

如果你是双缓冲,为什么不在等待新重绘的矢量图像时快速缩放位图作为“预览”?我承认我不知道怎么做。但如果你能让它起作用,它应该起作用!:)

谢谢你的回答。我对此进行了研究,但我更愿意坚持使用cairo,因为已经实现了导出功能。尽管使用了使用
BitmapFromImageSurface
创建的双缓冲区,我还是获得了性能,很高兴听到您找到了解决方案。我只想提到matplotlib还具有svg、png和其他格式的导出功能。我想知道cairo的速度有多快,因为我还有大约500条曲线要画。刚刚发现:matplotlib实际上使用了cairoI,我认为cairo本身可以非常快。这个问题可能有不同的原因。也许将整个绘图原语移动到C文件可以提高性能。谢谢你的想法。我尝试将
wx.Bitmap
缓冲区转换为
wx.Image
,使用
Image.Scale()
并将其转换回
BitmapFromImage
。但这几乎和开罗画图本身一样慢,因此没有效果。如果有一种更快的方法,我希望了解它:)我不确定转换为wx.Image涉及到什么,但您可能可以通过手动操作来避免这种情况(尽管可能不容易)。对于100%变焦,您只需将每个方向上每个像素的“大小”增加一倍。所以你可以循环四分之一的图像,读取一个像素,在一个正方形(x,y)(x+1,y)(x,y+1)(x+1,y+1)中写入四次。即使对于全屏位图,这种次要处理也应该相当快。对于其他缩放因子,可能需要一点灯光插值。