Пример #1
0
        /// <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;
        }