/// <summary> /// Render an image from a list of instructions that manipulate a 2d context of a canvas /// </summary> /// <param name="pngPath">Canvas output png path</param> /// <param name="contextVariableName">Name of the 2d context variable</param> /// <param name="script">Script to parse</param> /// <param name="width">Canvas width</param> /// <param name="height">Canvas height</param> /// <param name="notProcessInstuction">List of not processed instructions</param> /// <returns>Number of processed instructions</returns> public static int RenderScriptWith2dContextToPng(string pngPath, string contextVariableName, string script, int width, int height, List<string> notProcessInstuction = null) { int nbProcessed = 0; using (var canvas = new Canvas(width, height)) { var context = canvas.getContext("2d"); var instructions = script.Split(new[] { ';', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (var inst in instructions) { if (!inst.Contains(contextVariableName)) { if (notProcessInstuction != null && !string.IsNullOrWhiteSpace(inst)) notProcessInstuction.Add(inst); continue; } var idxAssign = inst.IndexOf('='); if (idxAssign < 0) { CallFunctionFromScriptInstruction(inst, context); } else { CallAssignFromScriptInstruction(inst, context); } nbProcessed++; } canvas.SaveToPng(pngPath); } return nbProcessed; }
public CanvasRenderingContext2d(Canvas canvas) { state.shadowBlur = 0; state.shadowOffsetX = 0; state.shadowOffsetY = 0; state.globalAlpha = 1; state.fillColor = new Color(0, 0, 0, 1); state.strokeColor = new Color(0, 0, 0, 1); state.patternQuality = Cairo.Filter.Good; state.textDrawingMode = "path"; canvas.Context.Antialias = Antialias.Subpixel; this.canvas = canvas; }