テクスチャブラシ
イメージで塗りつぶす
以前紹介したブラシの他に、複雑な模様を面に描画したい時に
Image オブジェクトをブラシとして使うことができる、テクスチャブラシと言うものがあります
テクスチャブラシは、System.Drawing.TextureBrush クラスで表されます
Object
MarshalByRefObject
Brush
TextureBrush
public sealed class TextureBrush : Brush
このクラスを利用することによって、面に特定のテクスチャを描画できます
コンストラクタは以下のものが定義されています
public TextureBrush(Image bitmap);
public TextureBrush(Image image , Rectangle dstRect);
public TextureBrush(Image image , RectangleF dstRect);
public TextureBrush(Image image , WrapMode wrapMode);
public TextureBrush(
Image image , Rectangle dstRect ,
ImageAttributes imageAttr
);
public TextureBrush(
Image image , RectangleF dstRect ,
ImageAttributes imageAttr
);
public TextureBrush(
Image image ,
WrapMode wrapMode , Rectangle dstRect
);
public TextureBrush(
Image image ,
WrapMode wrapMode , RectangleF dstRect
);
bitmap はテクスチャに使うイメージを表す Image オブジェクトを指定します
dstRect はイメージうち、テクスチャに用いる長方形を指定します
これを指定すれば、イメージから指定した部分だけがブラシに適応されます
imageAttr はガンマなどの属性をあらわす ImageAttributes オブジェクトを
wrapMode は、ブラシで塗りつぶす面がイメージよりも大きい時
どのようなパターンで塗りつぶすかを指定します
wrapMode は System.Drawing.Drawing2D.WrapMode列挙型です
public enum WrapMode
この列挙型には、次のような意味のメンバが定義されています
メンバ | 解説
|
---|
Clamp | 対象境界にイメージを固定する
|
Tile | イメージを繰り返し貼りつける
|
TileFlipX | 水平に反転したイメージと、通常のイメージを繰り返し貼りつける
|
TileFlipXY | 水平、垂直に反転したイメージと、通常のイメージを繰り返し貼りつける
|
TileFlipY | 垂直に反転したイメージと、通常のイメージを繰り返し貼りつける
|
WrapMode 列挙型は、TextureBrush.WrapMode プロパティでも設定できます
public WrapMode WrapMode {get; set;}
必要に応じて、イメージの貼り方を変更してください
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
class WinMain : Form {
public static void Main(string[] args) {
Application.Run(new WinMain());
}
override protected void OnPaint(PaintEventArgs e) {
Graphics g = e.Graphics;
Image img = new Bitmap("test.jpg");
Rectangle rect = new Rectangle(100 , 100 , 100 , 50);
Brush myBrush = new TextureBrush(img , WrapMode.TileFlipXY , rect);
g.FillRectangle(myBrush , 0 , 0 , 400 , 200);
}
}
この部分では、イメージの特定の長方形のみをブラシに用いています
さらに、WrapMode.TileFlipXY でイメージの長方形より大きな範囲を塗りつぶす場合
横には水平に反転したイメージ、縦には垂直に反転したイメージを繰り返し使います