我的GUI工具包,wxPython提供了一些实现用户缩放因子的方法,但质量不太好。我正在寻找有关如何创建缩放功能的想法,我知道这很复杂。
我有一个代表我的画布的位图。这显示在滚动窗口内。
我怀疑的问题: - 放大并在画布周围平移时的性能 - “真实”坐标和放大坐标的困难 - 图像质量不会因缩放而降低
在其设备上下文中使用wxPython的SetUserScale()会显示image quality like this - 这是1px行,放大30%。
我只是想知道我需要采取的一般步骤以及我将遇到的挑战。感谢您的任何建议
答案 0 :(得分:2)
您可以使用OpenGL渲染场景。您可以获得硬件扩展和平移,这可能会非常快。 OpenGL中也有各种平滑过滤器,如果你想要一个自定义过滤器,你可以使用GLSL。
如果您想手动执行操作,请查看bilinear interpolation和bicubic interpolation。
答案 1 :(得分:1)
您是否尝试过使用GraphicsContext
?
这是一些示例代码。使用GCDC
包装器可以很容易地放入现有代码中。您可能只需要以下行:dc = wx.GCDC(dc)
渲染速度会慢很多!您可以将此选项设置为可由用户启用/禁用。
alt text http://www.michaelfogleman.com/static/images/gcdc.png
import wx
import random
class Panel(wx.Panel):
def __init__(self, parent):
super(Panel, self).__init__(parent, -1)
self.Bind(wx.EVT_PAINT, self.on_paint)
self.lines = [[random.randint(0, 500) for i in range(4)] for j in range(100)]
def on_paint(self, event):
dc = wx.PaintDC(self)
dc = wx.GCDC(dc)
dc.SetUserScale(0.3, 0.3)
for line in self.lines:
dc.DrawLine(*line)
class Frame(wx.Frame):
def __init__(self):
super(Frame, self).__init__(None, -1, 'Test')
Panel(self)
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = Frame()
frame.Show()
app.MainLoop()