Esempio n. 1
0
        public void DrawPictureToPictureBuffer(PictureResource resource, bool overlay)
        {
            PictureRenderer    renderer    = new PictureRenderer(this.PictureBuffer);
            PictureInterpreter interpreter = new PictureInterpreter();

            if (!overlay)
            {
                renderer.Clear();
            }

            interpreter.Execute(resource, renderer);
        }
        /// <summary>
        /// Execute the specified picture resource.
        /// </summary>
        /// <param name="resource">Picture to execute.</param>
        /// <param name="renderer">Picture renderer.</param>
        public void Execute(PictureResource resource, PictureRenderer renderer)
        {
            if (resource == null)
            {
                throw new ArgumentNullException(nameof(resource));
            }

            this.Renderer = renderer ?? throw new ArgumentNullException(nameof(renderer));
            this.pattern  = 0;

            byte[] pictureData = resource.Data;
            int    offset      = 0;

            while (offset < pictureData.Length && pictureData[offset] != PictureCode.End)
            {
                byte instruction = pictureData[offset];
                offset++;

                switch (instruction)
                {
                case PictureCode.VisualEnabled:
                    this.Renderer.VisualEnabled = true;
                    this.Renderer.VisualColor   = pictureData[offset];
                    offset++;
                    break;

                case PictureCode.VisualDisabled:
                    this.Renderer.VisualEnabled = false;
                    break;

                case PictureCode.PriorityEnabled:
                    this.Renderer.PriorityEnabled = true;
                    this.Renderer.PriorityColor   = pictureData[offset];
                    offset++;
                    break;

                case PictureCode.PriorityDisabled:
                    this.Renderer.PriorityEnabled = false;
                    break;

                case PictureCode.YCorner:
                    offset = this.ReadYCorner(pictureData, offset);
                    break;

                case PictureCode.XCorner:
                    offset = this.ReadXCorner(pictureData, offset);
                    break;

                case PictureCode.AbsoluteLine:
                    offset = this.ReadAbsoluteLine(pictureData, offset);
                    break;

                case PictureCode.RelativeLine:
                    offset = this.ReadRelativeLine(pictureData, offset);
                    break;

                case PictureCode.Fill:
                    offset = this.ReadFill(pictureData, offset);
                    break;

                case PictureCode.Pattern:
                    this.pattern = pictureData[offset];
                    offset++;
                    break;

                case PictureCode.Brush:
                    offset = this.ReadBrush(pictureData, offset);
                    break;

                default:
                    break;
                }
            }
        }