// Generic functions down there, all ageing is done above
public Bitmap GeneratePerlinMask(int[] perlinSize, int perlinMultiplier, int perlinResolution)
{
int regionSize = 512;
perlinSize[0] = perlinSize[0] / perlinResolution;
perlinSize[1] = perlinSize[1] / perlinResolution;
perlinSize[0] = Math.Max(perlinSize[0], regionSize);
perlinSize[1] = Math.Max(perlinSize[1], regionSize);
int regionMultiplier = Math.Min((perlinSize[0] / regionSize) * perlinMultiplier, (perlinSize[1] / regionSize) * perlinMultiplier);
Bitmap bitmap = new Bitmap(perlinSize[0], perlinSize[1]);
PerlinNoise noise = new PerlinNoise(8, 0.3, 1.0 / 256, 1.0);
for (int y = 0; y < perlinSize[1]; y++)
{
for (int x = 0; x < perlinSize[0]; x++)
{
double c = Math.Max(0.0f, Math.Min(1.0f, (float)noise.Function2D(regionMultiplier * x, regionMultiplier * y) * 0.5f + 0.5f));
byte b = (byte)(c * 255);
bitmap.SetPixel(x, y, Color.FromArgb(b, b, b));
}
}
return bitmap;
}