private static void DoEffectByEffectName(Effector effector, Task task) { if (task.cut_pos_x != null && task.cut_pos_y != null) { effector.AddLayer(task.cut_file, Int32.Parse(task.cut_pos_x), Int32.Parse(task.cut_pos_y)); } else { effector.AddLayer(task.cut_file); // will produces centered image } var effectToBeParsed = task.parameters; switch (task.effect_name) { case "earthquake": var param = JsonConvert.DeserializeObject <Earthquake>(task.parameters); Console.WriteLine(" [i] make earthquake with param [power: {0}, speed: {1}, time: {2}]", param.power, param.speed, param.time); effector.Earthquake(param.power, param.speed, param.time); break; case "appear": var aparam = JsonConvert.DeserializeObject <Appear>(task.parameters); Console.WriteLine(" [i] make appear with param [time: {0}]", aparam.time); effector.None(aparam.time); break; case "shake": var sparam = JsonConvert.DeserializeObject <Shake>(task.parameters); Console.WriteLine(" [i] make shake with param [degree: {0}, speed: {1}, count: {2}]", sparam.degree, sparam.speed, sparam.count); effector.Shake(sparam.degree, sparam.speed, sparam.count); break; case "rotate": var rparam = JsonConvert.DeserializeObject <Rotate>(task.parameters); Console.WriteLine(" [i] make rotate with param [degree: {0}, way: {1}, speed: {2}]", rparam.degree, rparam.way ? "clockwise" : "counter-clockwise", rparam.speed); effector.Rotate(rparam.degree, rparam.way, rparam.speed); break; case "transition": var tparam = JsonConvert.DeserializeObject <Transition>(task.parameters); Console.WriteLine(" [i] make transition with param [xdes,ydes: ({0},{1}), speed: {2}, xpos,ypos: ({3},{4})]", tparam.xdes, tparam.ydes, tparam.speed, tparam.xpos, tparam.ypos); effector.Transition(tparam.xdes, tparam.ydes, tparam.speed, tparam.xpos, tparam.ypos); break; default: Console.WriteLine(" [!] not supported effect {0}, fallback to appear with 3 seconds", task.effect_name); goto case "appear"; } }
static void TestEffect() { var e = new Effector(30, new Size(1280, 800)); e.Initialize("black"); e.AddLayer("base.png").None(4) .AddLayer("alpharesized.png").Earthquake(16, 2, 5) .AddLayer("chat.png").Earthquake(10, 2, 2) .AddLayer("alpharesized.png", 10, 10).Earthquake(15, 2, 2); var file = e.Encode(); }