static ColorData GetColoredData(Color[] data, Color color, int width, int height) { var pixels = data.Clone() as Color[]; for (var i = 0; i < pixels.Length; i++) { // Linear burn gives best coloring results // Tools.ColorBlend(ref pixels[i].r, color.r); Tools.ColorBlend(ref pixels[i].g, color.g); Tools.ColorBlend(ref pixels[i].b, color.b); } return(new ColorData(width, height, pixels)); }
static GraphicsDatabase() { LoadSkinColors(); AllZombieImagesAsPath().Do(path => { var key = path.Replace('\\', '/'); var filePath = textureRoot + path.Replace('/', Path.DirectorySeparatorChar) + pngSuffix; var rootTexture = new Texture2D(2, 2, TextureFormat.ARGB32, true) { wrapMode = TextureWrapMode.Clamp }; if (rootTexture.LoadImage(File.ReadAllBytes(filePath)) == false) { throw new System.Exception("Cannot load texture " + filePath); } var width = rootTexture.width; var height = rootTexture.height; var originalPixels = rootTexture.GetPixels(); if (key.StartsWith("Zombie/")) { ZombieRGBSkinColors.Do(hex => { var pixels = originalPixels.Clone() as Color[]; var color = hex.HexColor(); for (int i = 0; i < pixels.Length; i++) { // Linear burn gives best coloring results // Tools.ColorBlend(ref pixels[i].r, color.r); Tools.ColorBlend(ref pixels[i].g, color.g); Tools.ColorBlend(ref pixels[i].b, color.b); } var data = new ColorData(width, height, pixels); database.Add(key + "#" + hex, data); }); } else { var data = new ColorData(width, height, originalPixels); database.Add(key, data); } }); }