7

サイズの異なるいくつかのカスタム画像を持つ多くの長方形のボタンを使用して、Kivy で GridLayout を作成したいと考えています。そのためには、画像を拡大縮小し (これを行う方法を以下に示します)、ウィジェットの境界からはみ出す部分をトリミング/非表示にします。サイズ変更はうまく機能しますが、長方形の外側にある部分を非表示/トリミングする方法がわかりません。例: ウィジェットのサイズが 10px x 10px で、画像が 100px x 200px の場合、10px x 20px にリサイズしてウィジェットの中央に配置しますが、上下の 5px が表示されます。私はそれを望んでいません。:) クラウド誰かがこの問題で私を助けてくれますか?

class PlaceIcon(Widget):
    def __init__(self,image_path, **kwargs):
        super(PlaceIcon, self).__init__(**kwargs)
        self.bind(size=self.adjust_size)
        self.image = Image(source=image_path)
        self.image_path = image_path  

    def adjust_size(self,*args):
        (a,b) = self.image.texture.size
        (x,y) = self.size
        (x1,y1) = self.pos
        if x > y:
            scale = x/a
        else:
            scale = y/b
        x1 -= (scale*a-x)/2
        y1 -= (scale*b-y)/2
        with self.canvas:
            self.canvas.clear()
            self.background = Rectangle(texture=self.image.texture, pos=(x1,y1), size=(scale*a,scale*b))
4

1 に答える 1

4

私は Texture.get_region を見たいと思います: http://kivy.org/docs/api-kivy.graphics.texture.html#kivy.graphics.texture.Texture.get_region

そのため、テクスチャの表示したい部分だけを使用して、まったく別のテクスチャであるかのように渡すことができます。

別の方法は StencilView を使用することですが、ここでは get_region の方が優れていると思います。

于 2013-05-25T11:23:14.423 に答える