I've been Googling for a while, and I came across this. I'll be testing this out.
private Bitmap ClippedBitmap(Bitmap texture, Point[] pointsArray, out Point position)
{
int minX = pointsArray.Min(x => x.X);
int maxX = pointsArray.Max(x => x.X);
int minY = pointsArray.Min(x => x.Y);
int maxY = pointsArray.Max(x => x.Y);
position = new Point(minX, minY);
Bitmap bit = new Bitmap(maxX - minX, maxY - minY);
Point[] offset = new Point[pointsArray.Length];
pointsArray.CopyTo(offset, 0);
offset = Array.ConvertAll(offset, x=> x = new Point(x.X - minX,x.Y - minY));
Graphics g = Graphics.FromImage(bit);
TextureBrush tb = new TextureBrush(texture);
g.FillPolygon(tb, offset);
return bit;
}