protected override List <MutableObject> ConversionFunc(OpcodeHistogram key, List <MutableObject> entry) { var opcodeList = new List <MutableObject>(); foreach (var opcode in key) { opcodeList.Add(new MutableObject { { "Opcode", opcode.Key }, { "Frequency", opcode.Value.Frequency } }); } return(opcodeList); }
public static ColorGradient GenerateTextureBanding(OpcodeHistogram opcodes, Color primaryColor, float hueRange, int numberOfBands, float bandWidth, float bandSaturation, float bandValue, float bandEdgeWidth) { var localCodes = opcodes.Values.ToList(); // sort opcodes localCodes.Sort((a, b) => { return(a.Opcode.CompareTo(b.Opcode)); }); float primaryH, primaryS, primaryV; Assets.Utility.ColorUtility.RGBToHSV(primaryColor, out primaryH, out primaryS, out primaryV); for (int i = 0; i < localCodes.Count; i++) { var newHue = primaryH + ((i / (float)localCodes.Count) - .5f) * hueRange * 2; localCodes[i].ColorBuffer = Assets.Utility.ColorUtility.HsvtoRgb(newHue, bandSaturation, bandValue); } localCodes.Sort((a, b) => { return(a.Frequency.CompareTo(b.Frequency)); }); localCodes.Reverse(); int codeCount = Mathf.Min(localCodes.Count, numberOfBands); int minFrequency = localCodes.Take(codeCount).Min(code => code.Frequency) - 1; int maxFrequency = localCodes.Take(codeCount).Max(code => code.Frequency) + 1; float inverseFrequencyMult = 1f / (maxFrequency - minFrequency); ColorGradient newGradient = new ColorGradient(codeCount * 4); for (int i = 0; i < codeCount; i++) { float frequencyMult = (localCodes[i].Frequency - minFrequency) * inverseFrequencyMult; DefineColorBand(i, frequencyMult, bandWidth, bandEdgeWidth, localCodes[i].ColorBuffer, primaryColor, ref newGradient); } //var colorPoints = newGradient.ColorKeys.Select(kvp => kvp.Value).ToList(); return(newGradient); }
public static ColorGradient GenerateDebugGradient(OpcodeHistogram opcodes, Color primaryColor, int numberOfBands = 5) { ColorGradient newGradient = new ColorGradient(8); newGradient.AddColorKey(new GradientColorKey(Color.green, .15f)); newGradient.AddColorKey(new GradientColorKey(Color.blue, .2f)); newGradient.AddColorKey(new GradientColorKey(Color.green, .25f)); newGradient.AddColorKey(new GradientColorKey(Color.green, .35f)); newGradient.AddColorKey(new GradientColorKey(Color.blue, .4f)); newGradient.AddColorKey(new GradientColorKey(Color.green, .45f)); newGradient.AddColorKey(new GradientColorKey(Color.blue, .65f)); newGradient.AddColorKey(new GradientColorKey(Color.red, .75f)); return(newGradient); }
public override IEnumerator ReceivePayload(VisualPayload payload) { var opcodes = new OpcodeHistogram(); var opcodeStrings = OpcodeCsv.GetFirstValue(payload.Data).Split(','); var opcodeFrequencies = (from f in FrequencyCsv.GetFirstValue(payload.Data).Split(',') select int.Parse(f.Trim())).ToArray(); for (int i = 0; i < Mathf.Min(opcodeStrings.Length, opcodeFrequencies.Count()); i++) { opcodes.Add(opcodeStrings[i], new OpcodePair(opcodeFrequencies[i], opcodeStrings[i])); } OpcodeTarget.SetValue(opcodes, payload.Data); var iterator = Router.TransmitAll(payload); while (iterator.MoveNext()) { yield return(null); } }
protected override MutableObject Mutate(MutableObject mutable) { var totalHistogram = new OpcodeHistogram(); foreach (var entry in InputHistograms.GetEntries(mutable)) { var foundOpcodes = InputHistograms.GetValue(entry); foreach (var kvp in foundOpcodes) { if (!totalHistogram.ContainsKey(kvp.Key)) { totalHistogram.Add(kvp.Key, kvp.Value); } totalHistogram[kvp.Key].Frequency += kvp.Value.Frequency; } } CombinedTarget.SetValue(totalHistogram, mutable); return(mutable); }
public override IEnumerator ReceivePayload(VisualPayload payload) { foreach (var entry in Scope.GetEntries(payload.Data)) { var generatedGradient = OpcodeToTextureBanding.GenerateTextureBanding( OpcodeHistogram.GetValue(entry), PrimaryColor.GetValue(entry), PrimaryImpactOnBands.GetValue(entry), NumberOfBands.GetValue(entry), BandWidth.GetValue(entry), BandSaturation.GetValue(entry), BandValue.GetValue(entry), BandEdgeWidth.GetValue(entry)); BandingTarget.SetValue(generatedGradient, entry); } var iterator = Router.TransmitAll(payload); while (iterator.MoveNext()) { yield return(null); } }