【问题标题】:How can I "best fit" an arbitrary cairo (pycairo) path?如何“最适合”任意 cairo (pycairo) 路径?
【发布时间】:2010-02-18 21:23:31
【问题描述】:

似乎给定stroke_extents()translate(x, y)scale(x, y) 函数中的信息,我应该能够采用任意cairo(我正在使用pycairo)路径并“最适合”它。换句话说,将其居中并展开以填充可用空间。

在绘制路径之前,我已经对画布进行了缩放,使得原点为左下角,上为 y+,右为 x+,高度和宽度均为 1。鉴于这些条件,此代码 似乎 正确缩放路径:

# cr is the canvas
extents = cr.stroke_extents()
x_size = abs(extents[0]) + abs(extents[2])
y_size = abs(extents[1]) + abs(extents[3])
cr.scale(1.0 / x_size, 1.0 / y_size)

不过,我终其一生都无法弄清楚翻译。有没有更简单的方法?如何在画布上“最适合”开罗路径?

如果这个问题有什么不清楚的地方,请要求澄清。

【问题讨论】:

    标签: graphics cairo pycairo


    【解决方案1】:

    我找到了一个我喜欢的解决方案(至少对于我的目的而言)。只需创建一个新表面并将旧表面涂在新表面上即可。

    【讨论】:

      【解决方案2】:

      仅就比例而言,我做了类似的事情,以“最适合”的方法调整框内的图像。至于规模,这里是代码:

      available_width = 800
      available_height = 600
      path_width = 500    
      figure_height = 700     
      
      # formulas
      width_ratio = float(available_width)/path_width
      height_ratio = float(available_height)/figure_height
      scale = min(height_ratio, width_ratio)
      
      # result
      new_path_width = path_width*scale
      new_figure_height = figure_height*scale
      
      print new_path_width, new_figure_height
      

      图像被绘制成与原点对齐(在我的例子中是左上角),所以也许应该做类似的事情来翻译路径。

      此外,这种最佳拟合旨在保持纵横比。如果要拉伸图形,请使用每个比率而不是“比例”变量。

      希望我有所帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-13
        • 2012-02-01
        • 1970-01-01
        • 2013-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多