예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
            }
        }
예제 #5
0
        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);
            }
        }