3

我的 GUI 工具包 wxPython 提供了一些实现用户缩放因子的方法,但是质量不太好。我正在寻找有关如何创建缩放功能的想法,我知道这很复杂。

我有一个位图代表我的画布,它被绘制到。这显示在滚动窗口内。

我预见到的问题: - 在画布上放大和平移时的性能 - “真实”坐标和放大坐标的困难 - 图像质量不会随着缩放而下降

在其设备上下文中使用 wxPython 的 SetUserScale() 可以呈现像这样的图像质量- 这是一条 1px 的线,放大 30%。

我只是想知道我需要采取的一般步骤以及我将遇到的挑战。感谢您的任何建议

4

2 回答 2

2

您可以使用 OpenGL 渲染场景。您可以获得硬件缩放和平移,这可能会非常快。OpenGL 中也有各种平滑过滤器可用,如果您想要自定义过滤器,可以使用 GLSL。

如果您想手动执行操作,请查看双线性插值双三次插值

于 2010-04-18T21:54:28.917 回答
2

你试过使用GraphicsContext吗?

这是一些示例代码。GCDC使用包装器应该很容易放入现有代码中。您可能只需要以下行:dc = wx.GCDC(dc)

渲染会慢很多!您可以将此设置为可由用户启用/禁用的选项。

替代文字 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()
于 2010-08-07T13:56:32.450 回答