2

以下に示すように、ある色から次の色へのハードトランジションを行う単一のブラシが必要です。別のコントロールの Fill Brush を提供しているので、単一の Brush オブジェクトが必要です。

私が欲しいもの:

http://mechgt.com/dump/sample.png

私はLinearGradientBrushいくつかの方法を試しましたが (一例として以下を参照)、強引な方法はありません。トランジションはまだグラデーションであり、線はぼやけています。

LinearGradientBrush brush = new LinearGradientBrush(pictureBox1.ClientRectangle, Color.Green, Color.Silver, 0f);
Blend blend = new Blend();
blend.Factors = new float[] { 0, 0, 1, 1 };
blend.Positions = new float[] { 0, .7f, .7f, 1 };
brush.Blend = blend;

私が得るもの:

http://mechgt.com/dump/sample2.png

これを行う単一のブラシを定義するにはどうすればよいですか?

4

1 に答える 1

2

これには、おそらくTexureBrush.

TextureBrushイメージをパラメーターとして受け取るため、ディスクから既存のイメージをロードするか、長方形などを描画するイメージをメモリに作成できます。

次の例では、GetTextureBrush が実際のブラシを作成します。ここで、色と形を定義します。必要に応じて調整してください。

例(VB.net):

Private Sub DrawBrush()

    Dim g As Graphics = Me.CreateGraphics
    Dim bmp As Image = GetTexureBrush
    Dim b As New TextureBrush(bmp)

    g.FillRectangle(b, New Rectangle(0, 0, 200, 500))

    b.Dispose()
    bmp.Dispose()
    g.Dispose()

End Sub
Private Function GetTexureBrush() As Image

    Dim bmp As New Bitmap(100, 20)
    Dim g As Graphics = Graphics.FromImage(bmp)

    g.FillRectangle(Brushes.DarkGreen, New Rectangle(0, 0, 75, 20))
    g.FillRectangle(Brushes.Gray, New Rectangle(75, 0, 25, 20))

    g.Dispose()

    Return bmp

End Function

C#

private void DrawBrush()
{
    Graphics g = this.CreateGraphics;
    Image bmp = GetTexureBrush();
    TextureBrush b = new TextureBrush(bmp);

    g.FillRectangle(b, new Rectangle(0, 0, 200, 500));

    b.Dispose();
    bmp.Dispose();
    g.Dispose();

}
private Image GetTexureBrush()
{

    Bitmap bmp = new Bitmap(100, 20);
    Graphics g = Graphics.FromImage(bmp);

    g.FillRectangle(Brushes.DarkGreen, new Rectangle(0, 0, 75, 20));
    g.FillRectangle(Brushes.Gray, new Rectangle(75, 0, 25, 20));

    g.Dispose();

    return bmp;

}
于 2012-11-23T15:19:00.597 に答える