private static Brush CreateImageBrush(Rectangle rect,
Image image,
PaletteImageStyle imageStyle)
{
// Create brush based on the provided image
TextureBrush brush = new TextureBrush(image);
// Create appropriate wrapping mode from image style
switch (imageStyle)
{
case PaletteImageStyle.TopLeft:
brush.WrapMode = WrapMode.Clamp;
brush.TranslateTransform(rect.Left, rect.Top);
break;
case PaletteImageStyle.TopMiddle:
brush.WrapMode = WrapMode.Clamp;
brush.TranslateTransform(rect.Left + (rect.Width - image.Width) / 2, rect.Top);
break;
case PaletteImageStyle.TopRight:
brush.WrapMode = WrapMode.Clamp;
brush.TranslateTransform(rect.Right - image.Width, rect.Top);
break;
case PaletteImageStyle.CenterLeft:
brush.WrapMode = WrapMode.Clamp;
brush.TranslateTransform(rect.Left, rect.Top + (rect.Height - image.Height) / 2);
break;
case PaletteImageStyle.CenterMiddle:
brush.WrapMode = WrapMode.Clamp;
brush.TranslateTransform(rect.Left + (rect.Width - image.Width) / 2, rect.Top + (rect.Height - image.Height) / 2);
break;
case PaletteImageStyle.CenterRight:
brush.WrapMode = WrapMode.Clamp;
brush.TranslateTransform(rect.Right - image.Width, rect.Top + (rect.Height - image.Height) / 2);
break;
case PaletteImageStyle.BottomLeft:
brush.WrapMode = WrapMode.Clamp;
brush.TranslateTransform(rect.Left, rect.Bottom - image.Height);
break;
case PaletteImageStyle.BottomMiddle:
brush.WrapMode = WrapMode.Clamp;
brush.TranslateTransform(rect.Left + (rect.Width - image.Width) / 2, rect.Bottom - image.Height);
break;
case PaletteImageStyle.BottomRight:
brush.WrapMode = WrapMode.Clamp;
brush.TranslateTransform(rect.Right - image.Width, rect.Bottom - image.Height);
break;
case PaletteImageStyle.Stretch:
brush.WrapMode = WrapMode.Clamp;
brush.TranslateTransform(rect.Left, rect.Top);
brush.ScaleTransform((float)rect.Width / (float)image.Width, (float)rect.Height / (float)image.Height);
break;
case PaletteImageStyle.Tile:
brush.WrapMode = WrapMode.Tile;
brush.TranslateTransform(rect.Left, rect.Top);
break;
case PaletteImageStyle.TileFlipX:
brush.WrapMode = WrapMode.TileFlipX;
brush.TranslateTransform(rect.Left, rect.Top);
break;
case PaletteImageStyle.TileFlipY:
brush.WrapMode = WrapMode.TileFlipY;
brush.TranslateTransform(rect.Left, rect.Top);
break;
case PaletteImageStyle.TileFlipXY:
brush.WrapMode = WrapMode.TileFlipXY;
brush.TranslateTransform(rect.Left, rect.Top);
break;
default:
// Should never happen!
Debug.Assert(false);
throw new ArgumentOutOfRangeException("imageStyle");
}
return brush;
}