// 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; }