I think that you can use a TextureBrush. For example, you can build it dynamically:
Bitmap bitmap = new Bitmap( 100, 100, System.Drawing.Imaging.PixelFormat.Format32bppPArgb );
Graphics graph = Graphics.FromImage( bitmap );
Rectangle rect = new Rectangle( 0, 0, 100, 100 );
using( var img = new Bitmap( 8, 8, graph ) )
{
using( var g = Graphics.FromImage( img ) )
{
g.Clear( Color.Orange );
g.FillRectangle( Brushes.White, 0, 6, 2, 2 );
g.FillRectangle( Brushes.White, 4, 3, 2, 2 );
}
var tb = new TextureBrush( img );
graph.FillRectangle( tb, rect );
}
bitmap.Save( "myImage.png", System.Drawing.Imaging.ImageFormat.Png );
You can load the texture brush from an existing image too, made by a Graphical Editor or Visual Studio, saved as a file or embedded resource.
It is also possible to scale it using tb.ScaleTransform.