3

TextureBrushを使用してUIのようなストリップを取得するために、幅= 1000、高さ= 16の寸法の長方形領域に画像(16x16)を並べて表示しようとしています。

 Rectangle myIconDrawingRectangle = new Rectangle(x, y, 1000, 16);
 using (TextureBrush brush = new TextureBrush(myIcon, WrapMode.Tile))
 {
    e.Graphics.FillRectangle(brush, myIconDrawingRectangle );
 }

x = 0で描画すると、(0,0)から期待どおりにy=0のタイリングが発生します。

x = 0で描画すると、y = 50のタイリングは(0,50)から始まりますが、描画長方形は画像の先頭から始まりません。画像のトリミングされた部分から始まり、それから繰り返されます。

これを解決する方法は?

PS:DrawImage上で繰り返しループして手動で並べて表示したくありません。

4

3 に答える 3

10

長方形の開始が画像の開始から始まるようにするために、以下のコードに示すように変換を使用します。

Rectangle myIconDrawingRectangle = new Rectangle(x, y, 1000, 16);
using (TextureBrush brush = new TextureBrush(myIcon, WrapMode.Tile))
{
    brush.TranslateTransform(x,y);
    e.Graphics.FillRectangle(brush, myIconDrawingRectangle);
}

このリンクは役に立ちました。これは、ブラシと変換について詳細に説明しています。

于 2011-09-08T15:25:47.423 に答える
3

これをWindowsフォームアプリケーションで試しましたが、y == 14のときに(0、14)で描画され、期待どおりに機能しyます。割り当ててから時間の間に16、32などに設定されている可能性はありますか長方形が作成されますか?

これが私がテストするために使用したコードです:

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);

    Image myIcon = Image.FromFile(@"C:\Users\me\Pictures\test.jpg");

    int x = 0;
    int y = 14;

    Rectangle myIconDrawingRectangle = new Rectangle(x, y, 1000, 16);
    using (TextureBrush brush = new TextureBrush(myIcon, WrapMode.Tile))
    {
        e.Graphics.FillRectangle(brush, myIconDrawingRectangle);
    }

    e.Graphics.DrawLine(Pens.Black, 0, 16, 1000, 16);
}

そして結果:

ここに画像の説明を入力してください

于 2011-09-07T13:50:24.683 に答える
1

TransalteTransform()を使用して開始点を設定します。これを行わない場合、以下のように、タイリングにオフセットがあり、これを修正します。

brush.TranslateTransform(0,50);
于 2012-08-15T08:43:33.280 に答える