示例#1
0
        public VxsTextPrinter(CanvasPainter canvasPainter, IFontLoader fontLoader)
        {
            this.canvasPainter = canvasPainter;
            this._fontLoader   = fontLoader;

            this.ScriptLang = canvasPainter.CurrentFont.GetOpenFontScriptLang();
            ChangeFont(canvasPainter.CurrentFont);
        }
示例#2
0
        public override void DrawCaret(float x, float y)
        {
            CanvasPainter p = this.TargetCanvasPainter;

            PixelFarm.Drawing.Color prevColor = p.StrokeColor;
            p.StrokeColor = PixelFarm.Drawing.Color.Red;
            p.Line(x, y, x, y + this.FontAscendingPx);
            p.StrokeColor = prevColor;
        }
 public MiniAggCanvasRenderElement(RootGraphic rootgfx, int width, int height)
     : base(rootgfx, width, height)
 {
     this.actualImage = new ActualImage(width, height, PixelFarm.Agg.PixelFormat.ARGB32);
     this.gfx2d       = Graphics2D.CreateFromImage(actualImage);
     this.painter     = new AggCanvasPainter((ImageGraphics2D)gfx2d);
     needUpdate       = true;
     this.BackColor   = Color.White;
 }
示例#4
0
        public VxsTextPrinter(CanvasPainter canvasPainter, IFontLoader fontLoader)
        {
            this.canvasPainter = canvasPainter;
            this._fontLoader   = fontLoader;

            _glyphMeshStore = new GlyphMeshStore();
            //
            _pxScaleEngine = new PixelScaleLayoutEngine();
            _pxScaleEngine.HintedFontStore = _glyphMeshStore;//share _glyphMeshStore with pixel-scale-layout-engine
        }
示例#5
0
        public override void Draw(CanvasPainter p)
        {
            p.Clear(ColorRGBA.White);
            //g.UseSubPixelRendering = true;
            string teststr = "ABCDE abcd 1230 Hello!";

            p.DrawString(teststr, 300, 400);
            //g.UseSubPixelRendering = false;
            //g.DrawString(teststr, 300, 422, 22);
        }
示例#6
0
        public static void PaintPicture(CanvasPainter painter)
        {
            Triangle  triangle  = new Triangle(new Point(10, 15), new Point(100, 200), new Point(150, 250));
            Rectangle rectangle = new Rectangle(new Point(30, 40), 18, 24, 0x6B8E23);

            Console.WriteLine("Triangle:");
            painter.Draw(triangle);
            Console.WriteLine("Rectangle:");
            painter.Draw(rectangle);
        }
示例#7
0
文件: App.cs 项目: protasov-ilja/OOD
        private void PaintPicture(CanvasPainter painter)
        {
            var triangle  = new Triangle(new Point(10, 15), new Point(100, 200), new Point(150, 250));
            var rectangle = new Rectangle(new Point(30, 40), 18, 24);

            Console.WriteLine("---------triangle--------");
            painter.Draw(triangle);
            Console.WriteLine("---------rectangle--------");
            painter.Draw(rectangle);
        }
 void RunSampleC(CanvasPainter p)
 {
     //version 3:
     p.Clear(PixelFarm.Drawing.Color.White);
     //---------------------------------------------
     p.StrokeColor          = PixelFarm.Drawing.Color.Black;
     p.StrokeWidth          = 1.0f;
     p.UseSubPixelRendering = true;
     p.Line(0, 0, 15, 20);
 }
示例#9
0
文件: App.cs 项目: protasov-ilja/OOD
        private void PaintPicture(CanvasPainter painter)
        {
            var triangle  = new Triangle(new Point(10, 15), new Point(100, 200), new Point(150, 250), (uint)Color.Black.ToArgb());
            var rectangle = new RectangeShape(new Point(30, 40), 18, 24, (uint)Color.Coral.ToArgb());

            Console.WriteLine("---------triangle--------");
            painter.Draw(triangle);
            Console.WriteLine("---------rectangle--------");
            painter.Draw(rectangle);
        }
示例#10
0
 public override void Draw(CanvasPainter p)
 {
     p.Clear(Color.White);
     if (BackgroundColor.Alpha0To255 > 0)
     {
         p.FillColor = BackgroundColor;
         p.FillRectangle(0, 0, this.Width, Height);
     }
     render_gpc(p);
 }
        static void DrawLineSet(CanvasPainter p, List <Point> contPoints)
        {
            int pcount = contPoints.Count;

            for (int i = 1; i < pcount; ++i)
            {
                var p0 = contPoints[i - 1];
                var p1 = contPoints[i];
                p.Line(p0.x, p0.y, p1.x, p1.y);
            }
        }
示例#12
0
 public override void Draw(CanvasPainter p)
 {
     p.DrawImage(actualImage, 0, 0);
     p.DrawImage(actualImage,
                 AffinePlan.Translate(actualImage.Width * 2, actualImage.Height * 2),
                 AffinePlan.Scale(0.5));
     p.FillColor = Drawing.Color.Blue;
     p.FillRectangle(0, 0, 5, 5);
     p.FillColor = Drawing.Color.Green;
     p.FillRectangle(actualImage.Width, actualImage.Height,
                     actualImage.Width + 5, actualImage.Height + 5);
 }
示例#13
0
        public override void Draw(CanvasPainter p)
        {
            p.Clear(Drawing.Color.White);
            //g.UseSubPixelRendering = true;
            string teststr = "ABCDE abcd 1230 Hello!";

            //string teststr = "A";
            p.FillColor = PixelFarm.Drawing.Color.Black;
            p.DrawString(teststr, 300, 400);
            //g.UseSubPixelRendering = false;
            //g.DrawString(teststr, 300, 422, 22);
        }
        static void DrawLion(CanvasPainter p, SpriteShape shape, VertexStore myvxs)
        {
            int j = shape.NumPaths;

            int[]   pathList = shape.PathIndexList;
            Color[] colors   = shape.Colors;
            for (int i = 0; i < j; ++i)
            {
                p.FillColor = colors[i];
                p.Fill(new VertexStoreSnap(myvxs, pathList[i]));
            }
        }
示例#15
0
        public override void Draw(Graphics2D g)
        {
            if (p == null)
            {
                p             = new CanvasPainter(g);
                p.StrokeColor = ColorRGBA.Black;
                p.StrokeWidth = 1;
            }

            p.Clear(ColorRGBA.White);
            p.FillColor = ColorRGBA.Black;

            int j = myBrushPathList.Count;

            for (int n = 0; n < j; ++n)
            {
                var brushPath = myBrushPathList[n];

                if (brushPath.vxs != null)
                {
                    switch (brushPath.BrushMode)
                    {
                    case SmoothBrushMode.CutBrush:
                    {
                    } break;

                    default:
                    {
                        p.FillColor = brushPath.FillColor;
                        p.Fill(brushPath.vxs);

                        if (brushPath.StrokeColor.alpha > 0)
                        {
                            p.StrokeColor = ColorRGBA.Red;
                            p.Draw(brushPath.vxs);
                        }
                    } break;
                    }
                }
                else
                {
                    var contPoints = brushPath.contPoints;
                    int pcount     = contPoints.Count;
                    for (int i = 1; i < pcount; ++i)
                    {
                        var p0 = contPoints[i - 1];
                        var p1 = contPoints[i];
                        p.Line(p0.x, p0.y, p1.x, p1.y);
                    }
                }
            }
        }
        public override void Draw(CanvasPainter p)
        {
            //-----------------------------------------------------------------
            //control
            CanvasPainter painter = p;

            painter.Clear(this.WhiteOnBlack ? ColorRGBA.Black : ColorRGBA.White);
            painter.FillColor = new ColorRGBA(127, 127, 127);
            painter.FillCircle(m_x[0], m_y[0], 3); //left-bottom control box
            painter.FillCircle(m_x[1], m_y[1], 3); //right-top control box
            //-----------------------------------------------------------------

            double           d           = this.SubPixelOffset;
            AggCanvasPainter p2          = p as AggCanvasPainter;
            IPixelBlender    prevBlender = null;
            Graphics2D       gx          = null;

            if (p2 != null)
            {
                //for agg only
                gx          = p2.Graphics;
                prevBlender = gx.PixelBlender;
                //change gamma blender
                gx.PixelBlender = new PixelBlenderGammaBGRA(this.Gamma);
            }

            if (this.FillRoundRect)
            {
                painter.FillColor = this.WhiteOnBlack ? ColorRGBA.White : ColorRGBA.Black;
                painter.FillRoundRectangle(
                    m_x[0] + d,
                    m_y[0] + d,
                    m_x[1] + d,
                    m_y[1] + d,
                    this.Radius);
            }
            else
            {
                painter.StrokeColor = this.WhiteOnBlack ? ColorRGBA.White : ColorRGBA.Black;
                painter.DrawRoundRect(
                    m_x[0] + d,
                    m_y[0] + d,
                    m_x[1] + d,
                    m_y[1] + d,
                    this.Radius);
            }
            if (gx != null)
            {
                gx.PixelBlender = prevBlender;
            }
        }
示例#17
0
        public override void Draw(CanvasPainter p)
        {
            //specific for agg

            if (p is PixelFarm.Agg.AggCanvasPainter)
            {
                var        p2 = (PixelFarm.Agg.AggCanvasPainter)p;
                Graphics2D gx = p2.Graphics;
                var        widgetsSubImage = ImageHelper.CreateChildImage(gx.DestImage, gx.GetClippingRect());
                gx.UseSubPixelRendering = false;
                IPixelBlender  NormalBlender       = new PixelBlenderBGRA();
                IPixelBlender  GammaBlender        = new PixelBlenderGammaBGRA(this.GammaValue);
                var            rasterGamma         = new ChildImage(widgetsSubImage, GammaBlender);
                ClipProxyImage clippingProxyNormal = new ClipProxyImage(widgetsSubImage);
                ClipProxyImage clippingProxyGamma  = new ClipProxyImage(rasterGamma);
                clippingProxyNormal.Clear(Color.White);
                var rasterizer       = gx.ScanlineRasterizer;
                ScanlineUnpacked8 sl = new ScanlineUnpacked8();
                int size_mul         = (int)this.PixelSize;
                CustomScanlineRasToBmp_EnlargedSubPixelRendering ren_en = new CustomScanlineRasToBmp_EnlargedSubPixelRendering(size_mul, gx.DestActualImage);
                rasterizer.Reset();
                rasterizer.MoveTo(m_x[0] / size_mul, m_y[0] / size_mul);
                rasterizer.LineTo(m_x[1] / size_mul, m_y[1] / size_mul);
                rasterizer.LineTo(m_x[2] / size_mul, m_y[2] / size_mul);
                ren_en.RenderWithColor(clippingProxyGamma, rasterizer, sl, Color.Black);
                //----------------------------------------
                ScanlineRasToDestBitmapRenderer sclineRasToBmp = gx.ScanlineRasToDestBitmap;
                gx.UseSubPixelRendering = true;
                sclineRasToBmp.RenderWithColor(clippingProxyGamma, rasterizer, sl, Color.Black);
                rasterizer.ResetGamma(new GammaNone());
                gx.UseSubPixelRendering = false;
                //----------------------------------------
                PathWriter ps = new PathWriter();
                ps.Clear();
                ps.MoveTo(m_x[0], m_y[0]);
                ps.LineTo(m_x[1], m_y[1]);
                ps.LineTo(m_x[2], m_y[2]);
                ps.LineTo(m_x[0], m_y[0]);
                //----------------------------------------
                //Stroke stroke = new Stroke(ps);
                //stroke.Width = 2;
                //rasterizer.AddPath(stroke.MakeVxs(ps.MakeVxs()));
                var v1 = GetFreeVxs();
                rasterizer.AddPath(stroke.MakeVxs(ps.Vxs, v1));
                ReleaseVxs(ref v1);
                //----------------------------------------

                sclineRasToBmp.RenderWithColor(clippingProxyNormal, rasterizer, sl, new Color(200, 0, 150, 160));
            }
        }
示例#18
0
        public override void DrawGlyphPlanList(List <GlyphPlan> glyphPlanList, int startAt, int len, float xpos, float ypos)
        {
            CanvasPainter canvasPainter = this.TargetCanvasPainter;
            Typeface      typeface      = _glyphPathBuilder.Typeface;
            //3. layout glyphs with selected layout technique
            //TODO: review this again, we should use pixel?

            float fontSizePoint = this.FontSizeInPoints;
            float scale         = typeface.CalculateFromPointToPixelScale(fontSizePoint);


            //4. render each glyph
            float ox        = canvasPainter.OriginX;
            float oy        = canvasPainter.OriginY;
            int   endBefore = startAt + len;

            //---------------------------------------------------
            //consider use cached glyph, to increase performance
            hintGlyphCollection.SetCacheInfo(typeface, fontSizePoint, this.HintTechnique);
            //---------------------------------------------------
            for (int i = startAt; i < endBefore; ++i)
            {
                GlyphPlan glyphPlan = glyphPlanList[i];
                //-----------------------------------
                //TODO: review here ***
                //PERFORMANCE revisit here
                //if we have create a vxs we can cache it for later use?
                //-----------------------------------
                VertexStore glyphVxs;
                if (!hintGlyphCollection.TryGetCacheGlyph(glyphPlan.glyphIndex, out glyphVxs))
                {
                    //if not found then create new glyph vxs and cache it
                    _glyphPathBuilder.BuildFromGlyphIndex(glyphPlan.glyphIndex, fontSizePoint);
                    //-----------------------------------
                    _tovxs.Reset();
                    _glyphPathBuilder.ReadShapes(_tovxs);

                    //TODO: review here,
                    //float pxScale = _glyphPathBuilder.GetPixelScale();
                    glyphVxs = new VertexStore();
                    _tovxs.WriteOutput(glyphVxs, _vxsPool);
                    //
                    hintGlyphCollection.RegisterCachedGlyph(glyphPlan.glyphIndex, glyphVxs);
                }
                canvasPainter.SetOrigin((float)(glyphPlan.x * scale + xpos), (float)(glyphPlan.y * scale + ypos));
                canvasPainter.Fill(glyphVxs);
            }
            //restore prev origin
            canvasPainter.SetOrigin(ox, oy);
        }
示例#19
0
        public override void Draw(Graphics2D g)
        {
            if (p == null)
            {
                p             = new CanvasPainter(g);
                p.StrokeColor = ColorRGBA.Black;
                p.StrokeWidth = 1;
            }

            p.Clear(ColorRGBA.White);

            var plistCount = pointSets.Count;

            p.StrokeColor = ColorRGBA.Black;
            for (int n = 0; n < plistCount; ++n)
            {
                var contPoints = pointSets[n];
                DrawLineSet(p, contPoints);
            }

            plistCount    = simplifiedPointSets.Count;
            p.StrokeColor = ColorRGBA.Red;

            for (int n = 0; n < plistCount; ++n)
            {
                var contPoints = simplifiedPointSets[n];
                DrawLineSet(p, contPoints);
            }

            p.StrokeColor = ColorRGBA.Blue;
            p.FillColor   = ColorRGBA.Black;

            int ccount = cubicCurves.Count;

            for (int i = 0; i < ccount; ++i)
            {
                var cc = cubicCurves[i];
                FillPoint(cc.p0, p);
                FillPoint(cc.p1, p);
                FillPoint(cc.p2, p);
                FillPoint(cc.p3, p);


                p.DrawBezierCurve(
                    (float)cc.p0.x, (float)cc.p0.y,
                    (float)cc.p3.x, (float)cc.p3.y,
                    (float)cc.p1.x, (float)cc.p1.y,
                    (float)cc.p2.x, (float)cc.p2.y);
            }
        }
        public void TestDrawCanvas()
        {
            Shape shape = ShapeFactory.GetCircle();

            shape.pointOne.X = 10;
            shape.pointOne.Y = 10;
            shape.radius     = 2;
            Canvas canvas = new Canvas();

            canvas.size      = new string[10, 10];
            canvas.shapeList = new List <Shape>();
            canvas.shapeList.Add(shape);
            CanvasPainter.CreateCanvas(canvas);
        }
        public void TestDrawCanvas()
        {
            Shape shape = ShapeFactory.GetRectangle();

            shape.pointOne.X = 1;
            shape.pointOne.Y = 1;
            shape.pointTwo.X = 5;
            shape.pointTwo.Y = 5;
            Canvas canvas = new Canvas();

            canvas.size      = new string[10, 10];
            canvas.shapeList = new List <Shape>();
            canvas.shapeList.Add(shape);
            CanvasPainter.CreateCanvas(canvas);
        }
示例#22
0
        public void Print(CanvasPainter painter, char[] buffer, double x, double y)
        {
            int j        = buffer.Length;
            int buffsize = j * 2;

            //get kerning list

            ProperGlyph[] properGlyphs = new ProperGlyph[buffsize];
            currentFont.GetGlyphPos(buffer, 0, buffsize, properGlyphs);


            double xpos = x;

            for (int i = 0; i < buffsize; ++i)
            {
                uint codepoint = properGlyphs[i].codepoint;
                if (codepoint == 0)
                {
                    break;
                }
                //-------------------------------------------------------------
                FontGlyph glyph = this.currentFont.GetGlyphByIndex(codepoint);
                var       left  = glyph.exportGlyph.img_horiBearingX;

                //--------------------------------------------------------
                //render with vector
                //var mat = Agg.Transform.Affine.NewMatix(
                //Agg.Transform.AffinePlan.Scale(0.30),
                //Agg.Transform.AffinePlan.Translate(xpos, y));
                //var vxs1 = mat.TransformToVxs(glyph.flattenVxs);

                VertexStore vxs1 = Agg.Transform.Affine.TranslateToVxs(
                    glyph.flattenVxs,
                    (float)(xpos),
                    (float)(y));

                painter.Fill(vxs1);
                //--------------------------------------------------------
                ////render with bitmap
                //this.painter.DrawImage(glyph.glyphImage32,
                //    (float)(xpos + (left >> 6)),
                //    (float)(y + (glyph.exportGlyph.bboxYmin >> 6)));

                int w = (glyph.exportGlyph.advanceX) >> 6;
                xpos += (w);
                //-------------------------------------------------------------
            }
        }
示例#23
0
        public VxsTextPrinter(CanvasPainter canvasPainter)
        {
            this.canvasPainter = canvasPainter;
            RequestFont font = canvasPainter.CurrentFont;

            Typography.OpenFont.ScriptLang scLang = Typography.OpenFont.ScriptLangs.GetRegisteredScriptLang(font.ScriptCode.shortname);
#if DEBUG
            if (scLang == null)
            {
                throw new NotSupportedException("unknown script lang");
            }
#endif
            vxsTextPrinter.ScriptLang = scLang;
            //1.  resolve actual font file
            vxsTextPrinter.FontFile = "d:\\WImageTest\\tahoma.ttf";
        }
        public override void Draw(CanvasPainter p)
        {
            p.FillColor = ColorRGBA.Blue;
            p.FillRectangle(0, 70, 150, 120);
            //-------------------------------------------
            var innerGradient = new Gradients.GvcRadial();
            SpanInterpolatorLinear       linerInterpolator   = new SpanInterpolatorLinear(Affine.IdentityMatrix);
            LinearGradientColorsProvider linearColorProvider = new LinearGradientColorsProvider(ColorRGBA.Red, ColorRGBA.Yellow);
            SpanGenGradient spanGenGradient = new SpanGenGradient(linerInterpolator,
                                                                  innerGradient,
                                                                  linearColorProvider,
                                                                  0, 150);
            SimpleRect srect = new SimpleRect(0, 0, 150, 50);

            p.Fill(srect.MakeVxs(), spanGenGradient);
        }
示例#25
0
        public static void PaintPictureOnMGRClassAdapter()
        {
            ClassAdapter  classAdapter = new ClassAdapter(Console.Out);
            CanvasPainter painter      = new CanvasPainter(classAdapter);

            try
            {
                classAdapter.BeginDraw();
                PaintPicture(painter);
                classAdapter.EndDraw();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
示例#26
0
文件: App.cs 项目: protasov-ilja/OOD
        private void PaintPictureOnMGRendererClassAdapter()
        {
            var adapter = new MGRendererClassAdapter(Console.Out);
            var painter = new CanvasPainter(adapter);

            try
            {
                adapter.BeginDraw();
                PaintPicture(painter);
                adapter.EndDraw();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
示例#27
0
        void DrawBoneJoint(CanvasPainter painter, GlyphBoneJoint joint)
        {
            //--------------
            EdgeLine p_contactEdge = joint.dbugGetEdge_P();
            //mid point
            Vector2 jointPos = joint.OriginalJointPos * _pxscale;//scaled joint pos

            painter.FillRectLBWH(jointPos.X, jointPos.Y, 4, 4, PixelFarm.Drawing.Color.Yellow);
            if (joint.TipEdgeP != null)
            {
                EdgeLine tipEdge = joint.TipEdgeP;
                double   p_x, p_y, q_x, q_y;
                tipEdge.dbugGetScaledXY(out p_x, out p_y, out q_x, out q_y, _pxscale);
                //
                painter.Line(
                    jointPos.X, jointPos.Y,
                    p_x, p_y,
                    PixelFarm.Drawing.Color.White);
                painter.FillRectLBWH(p_x, p_y, 3, 3, PixelFarm.Drawing.Color.Green); //marker

                //
                painter.Line(
                    jointPos.X, jointPos.Y,
                    q_x, q_y,
                    PixelFarm.Drawing.Color.White);
                painter.FillRectLBWH(q_x, q_y, 3, 3, PixelFarm.Drawing.Color.Green); //marker
            }
            if (joint.TipEdgeQ != null)
            {
                EdgeLine tipEdge = joint.TipEdgeQ;
                double   p_x, p_y, q_x, q_y;
                tipEdge.dbugGetScaledXY(out p_x, out p_y, out q_x, out q_y, _pxscale);
                //
                painter.Line(
                    jointPos.X, jointPos.Y,
                    p_x, p_y,
                    PixelFarm.Drawing.Color.White);
                painter.FillRectLBWH(p_x, p_y, 3, 3, PixelFarm.Drawing.Color.Green); //marker

                //
                painter.Line(
                    jointPos.X, jointPos.Y,
                    q_x, q_y,
                    PixelFarm.Drawing.Color.White);
                painter.FillRectLBWH(q_x, q_y, 3, 3, PixelFarm.Drawing.Color.Green); //marker
            }
        }
示例#28
0
        public override void Draw(CanvasPainter p)
        {
            p.Clear(Drawing.Color.White);
            p.FillColor = Drawing.Color.Black;
            int j = myBrushPathList.Count;

            for (int n = 0; n < j; ++n)
            {
                var brushPath = myBrushPathList[n];
                if (brushPath.Vxs != null)
                {
                    switch (brushPath.BrushMode)
                    {
                    case SmoothBrushMode.CutBrush:
                    {
                    }
                    break;

                    default:
                    {
                        //TODO: review PixelCache here
                        p.FillColor = brushPath.FillColor;
                        p.Fill(brushPath.Vxs);
                        if (brushPath.StrokeColor.alpha > 0)
                        {
                            p.StrokeColor = Drawing.Color.Red;
                            p.Draw(brushPath.Vxs);
                        }
                    }
                    break;
                    }
                }
                else
                {
                    //current drawing brush
                    var contPoints = brushPath.contPoints;
                    int pcount     = contPoints.Count;
                    for (int i = 1; i < pcount; ++i)
                    {
                        var p0 = contPoints[i - 1];
                        var p1 = contPoints[i];
                        p.Line(p0.x, p0.y, p1.x, p1.y);
                    }
                }
            }
        }
示例#29
0
        void RenderGrids(int width, int height, int sqSize, CanvasPainter p)
        {
            //render grid
            p.FillColor = PixelFarm.Drawing.Color.Gray;

            float pointW = (sqSize >= 100) ? 2 : 1;

            for (int y = 0; y < height;)
            {
                for (int x = 0; x < width;)
                {
                    p.FillRectLBWH(x, y, pointW, pointW);
                    x += sqSize;
                }
                y += sqSize;
            }
        }
示例#30
0
        public static void PaintPictureOnMGRObjectAdapter()
        {
            ModernGraphicsRenderer renderer      = new ModernGraphicsRenderer(Console.Out);
            ObjectAdapter          objectAdapter = new ObjectAdapter(renderer);
            CanvasPainter          painter       = new CanvasPainter(objectAdapter);

            try
            {
                renderer.BeginDraw();
                PaintPicture(painter);
                renderer.EndDraw();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }