1

stroke_extents()と関数の情報が与えられたようにtranslate(x, y)scale(x, y)私は任意のカイロ(私は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)

しかし、私は一生の間、翻訳を理解することはできません。より簡単なアプローチはありますか?カイロパスをキャンバスに「最適」にするにはどうすればよいですか?

この質問で不明な点がある場合は、説明を求めてください。

4

2 に答える 2

2

私は(少なくとも私の目的のために)好きな解決策を見つけました。新しいサーフェスを作成し、古いサーフェスを新しいサーフェスにペイントするだけです。

于 2010-05-28T03:14:59.850 に答える
0

As for the scale only, I have done a similar thing to adjust an image inside a box with a "best-fit" approach. As about scale, here is the code:

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

The image gets drawn aligned to the origin (top left in my case), so perhaps a similar thing should be done to translate the path.

Also, this best fit is intended to preserve aspect ratio. If you want to stretch the figure, use each of the ratios instead of the 'scale' variable.

Hope I have helped

于 2011-04-01T13:52:57.730 に答える