Пример #1
0
        void RenderWithMiniAgg(Typeface typeface, char testChar, float sizeInPoint)
        {
            //2. glyph-to-vxs builder
            var builder = new GlyphPathBuilderVxs(typeface);

            builder.Build(testChar, sizeInPoint);
            VertexStore vxs = builder.GetVxs();

            //5. use PixelFarm's Agg to render to bitmap...
            //5.1 clear background
            p.Clear(PixelFarm.Drawing.Color.White);

            //if (chkFillBackground.Checked)
            //{
            //5.2
            p.FillColor = PixelFarm.Drawing.Color.Black;
            //5.3
            p.Fill(vxs);
            //}
            //if (chkBorder.Checked)
            //{
            //5.4
            p.StrokeColor = PixelFarm.Drawing.Color.Green;
            //user can specific border width here...
            //p.StrokeWidth = 2;
            //5.5
            p.Draw(vxs);
            //}
            //6. use this util to copy image from Agg actual image to System.Drawing.Bitmap
            //BitmapHelper.CopyToWindowsBitmap(destImg, winBmp, new RectInt(0, 0, 300, 300));
            ////---------------
            ////7. just render our bitmap
            //g.Clear(Color.White);
            //g.DrawImage(winBmp, new Point(10, 0));
        }
Пример #2
0
        void RenderWithMiniAgg(Typeface typeface, char testChar, float sizeInPoint)
        {
            //----------------------------------------------------
            var builder = new GlyphPathBuilder(typeface);

            builder.SetHintTechnique((HintTechnique)lstHintList.SelectedItem);
            //----------------------------------------------------
            builder.Build(testChar, sizeInPoint);
            var txToVxs1 = new GlyphTranslatorToVxs();

            builder.ReadShapes(txToVxs1);

            VertexStore vxs = new VertexStore();

            txToVxs1.WriteOutput(vxs, _vxsPool);

            //----------------------------------------------------
            p.UseSubPixelRendering = chkLcdTechnique.Checked;

            //5. use PixelFarm's Agg to render to bitmap...
            //5.1 clear background
            p.Clear(PixelFarm.Drawing.Color.White);

            if (chkFillBackground.Checked)
            {
                //5.2
                p.FillColor = PixelFarm.Drawing.Color.Black;
                //5.3
                p.Fill(vxs);
            }
            if (chkBorder.Checked)
            {
                //5.4
                // p.StrokeWidth = 3;
                p.StrokeColor = PixelFarm.Drawing.Color.Green;
                //user can specific border width here...
                //p.StrokeWidth = 2;
                //5.5
                p.Draw(vxs);
            }



            if (chkShowGrid.Checked)
            {
                //render grid
                RenderGrid(800, 600, _gridSize, p);
            }



            //6. use this util to copy image from Agg actual image to System.Drawing.Bitmap
            PixelFarm.Agg.Imaging.BitmapHelper.CopyToGdiPlusBitmapSameSize(destImg, winBmp);
            //---------------
            //7. just render our bitmap
            g.Clear(Color.White);
            g.DrawImage(winBmp, new Point(30, 20));
        }
Пример #3
0
        public override void DrawRect(CGRect dirtyRect)
        {
            if (!drawInit)
            {
                this.Window.Title = "PixelFarm";
                drawInit          = true;
                destImg           = new ActualImage(destImgW, destImgH, PixelFarm.Agg.PixelFormat.ARGB32);
                imgGfx2d          = new ImageGraphics2D(destImg);        //no platform
                p      = new AggCanvasPainter(imgGfx2d);
                stride = destImg.Stride;
                LoadGlyphs();
            }
            //base.Draw(rect);
            base.DrawRect(dirtyRect);


            p.Clear(Color.Yellow);
            p.FillColor = Color.Black;
            p.Fill(vxs);

            var            data     = Foundation.NSData.FromArray(ActualImage.GetBuffer(destImg));
            CGDataProvider provider = new CGDataProvider(data);

            using (var myImg2 = new CGImage(
                       destImgW, destImgH,
                       8, 32,
                       stride, CGColorSpace.CreateGenericRgb(),
                       CGBitmapFlags.PremultipliedLast,
                       provider,
                       null, true,
                       CGColorRenderingIntent.AbsoluteColorimetric))

                using (var nsGraphics = AppKit.NSGraphicsContext.CurrentContext)
                {
                    CGContext g      = nsGraphics.CGContext;
                    CGColor   color0 = new CGColor(1, 1, 1, 1);
                    g.SetFillColor(color0);
                    //g.ClearRect(new CGRect(0, 0, 800, 600));
                    //----------

                    CGColor color1 = new CGColor(1, 0, 0, 1);
                    g.SetFillColor(color1);

                    CGRect s1    = CGRect.FromLTRB(0, 0, 50, 50);
                    CGPath gpath = new CGPath();
                    gpath.AddRect(CGAffineTransform.MakeTranslation(20, 20), s1);
                    g.AddPath(gpath);
                    g.FillPath();


                    CGRect s2 = new CGRect(50, 50, destImgW, destImgH);
                    g.DrawImage(s2, myImg2);

                    //

                    //g.FillRect(s1);

                    CGColor color2 = new CGColor(0, 0, 1, 1);
                    g.SetFillColor(color2);
                    g.TranslateCTM(30, 30);


                    var strAttr = new CTStringAttributes
                    {
                        ForegroundColorFromContext = true,
                        Font = new CTFont("Arial", 24)
                    };


                    g.ScaleCTM(1, -1);            //flip
                    NSAttributedString a_str = new NSAttributedString("abcd", strAttr);
                    using (CTLine line = new CTLine(a_str))
                    {
                        line.Draw(g);
                    }


                    ////if (chkBorder.Checked)
                    ////{
                    ////	//5.4
                    ////	p.StrokeColor = PixelFarm.Drawing.Color.Green;
                    ////	//user can specific border width here...
                    ////	//p.StrokeWidth = 2;
                    ////	//5.5
                    ////	p.Draw(vxs);
                    ////}
                    ////6. use this util to copy image from Agg actual image to System.Drawing.Bitmap
                    //BitmapHelper.CopyToWindowsBitmap(destImg, winBmp, new RectInt(0, 0, 300, 300));
                    ////---------------
                    ////7. just render our bitmap
                    //g.ClearRect(rect);

                    //g.DrawImage(winBmp, new Point(10, 0));
                }



            //// scale and translate the CTM so the image appears upright
            //g.ScaleCTM (1, -1);
            //g.TranslateCTM (0, -Bounds.Height);
            //g.DrawImage (rect, UIImage.FromFile ("MyImage.png").CGImage);
            //// translate the CTM by the font size so it displays on screen
            //float fontSize = 35f;
            //g.TranslateCTM (0, fontSize);

            //// set general-purpose graphics state
            //g.SetLineWidth (1.0f);
            //g.SetStrokeColor (UIColor.Yellow.CGColor);
            //g.SetFillColor (UIColor.Red.CGColor);
            //g.SetShadow (new CGSize (5, 5), 0, UIColor.Blue.CGColor);

            //// set text specific graphics state
            //g.SetTextDrawingMode (CGTextDrawingMode.FillStroke);
            //g.SelectFont ("Helvetica", fontSize, CGTextEncoding.MacRoman);

            //// show the text
            //g.ShowText ("Hello Core Graphics");
        }
Пример #4
0
        //template<class Scanline, class Ras>
        public void RenderGourand(CanvasPainter p)
        {
            float alpha = this.AlphaValue;
            float brc   = 1;

#if SourceDepth24
            pixfmt_alpha_blend_rgb pf = new pixfmt_alpha_blend_rgb(backBuffer, new blender_bgr());
#else
#endif
            ////var destImage = gx.DestImage;
            ////span_allocator span_alloc = new span_allocator();

            //specific for agg
            AggCanvasPainter painter = p as AggCanvasPainter;
            if (painter == null)
            {
                return;
            }

            //
            Graphics2D         gx             = painter.Graphics;
            SpanGenGouraudRGBA gouraudSpanGen = new SpanGenGouraudRGBA();
            gx.ScanlineRasterizer.ResetGamma(new GammaLinear(0.0f, this.LinearGamma));
            double d = this.DilationValue;
            // Six triangles
            double xc = (m_x[0] + m_x[1] + m_x[2]) / 3.0;
            double yc = (m_y[0] + m_y[1] + m_y[2]) / 3.0;
            double x1 = (m_x[1] + m_x[0]) / 2 - (xc - (m_x[1] + m_x[0]) / 2);
            double y1 = (m_y[1] + m_y[0]) / 2 - (yc - (m_y[1] + m_y[0]) / 2);
            double x2 = (m_x[2] + m_x[1]) / 2 - (xc - (m_x[2] + m_x[1]) / 2);
            double y2 = (m_y[2] + m_y[1]) / 2 - (yc - (m_y[2] + m_y[1]) / 2);
            double x3 = (m_x[0] + m_x[2]) / 2 - (xc - (m_x[0] + m_x[2]) / 2);
            double y3 = (m_y[0] + m_y[2]) / 2 - (yc - (m_y[0] + m_y[2]) / 2);
            gouraudSpanGen.SetColor(Drawing.Color.Make(1, 0, 0, alpha),
                                    Drawing.Color.Make(0, 1, 0, alpha),
                                    Drawing.Color.Make(brc, brc, brc, alpha));
            gouraudSpanGen.SetTriangle(m_x[0], m_y[0], m_x[1], m_y[1], xc, yc, d);

            var tmpVxs = _tmpVxs;
            painter.Fill(gouraudSpanGen.MakeVxs(tmpVxs), gouraudSpanGen);
            tmpVxs.Clear();
            gouraudSpanGen.SetColor(Drawing.Color.Make(0, 1, 0, alpha),
                                    Drawing.Color.Make(0, 0, 1, alpha),
                                    Drawing.Color.Make(brc, brc, brc, alpha));
            gouraudSpanGen.SetTriangle(m_x[1], m_y[1], m_x[2], m_y[2], xc, yc, d);
            painter.Fill(gouraudSpanGen.MakeVxs(tmpVxs), gouraudSpanGen);
            tmpVxs.Clear();
            gouraudSpanGen.SetColor(Drawing.Color.Make(0, 0, 1, alpha),
                                    Drawing.Color.Make(1, 0, 0, alpha),
                                    Drawing.Color.Make(brc, brc, brc, alpha));
            gouraudSpanGen.SetTriangle(m_x[2], m_y[2], m_x[0], m_y[0], xc, yc, d);
            painter.Fill(gouraudSpanGen.MakeVxs(tmpVxs), gouraudSpanGen);
            tmpVxs.Clear();
            brc = 1 - brc;
            gouraudSpanGen.SetColor(Drawing.Color.Make(1, 0, 0, alpha),
                                    Drawing.Color.Make(0, 1, 0, alpha),
                                    Drawing.Color.Make(brc, brc, brc, alpha));
            gouraudSpanGen.SetTriangle(m_x[0], m_y[0], m_x[1], m_y[1], x1, y1, d);
            painter.Fill(gouraudSpanGen.MakeVxs(tmpVxs), gouraudSpanGen);
            tmpVxs.Clear();
            gouraudSpanGen.SetColor(Drawing.Color.Make(0, 1, 0, alpha),
                                    Drawing.Color.Make(0, 0, 1, alpha),
                                    Drawing.Color.Make(brc, brc, brc, alpha));
            gouraudSpanGen.SetTriangle(m_x[1], m_y[1], m_x[2], m_y[2], x2, y2, d);
            painter.Fill(gouraudSpanGen.MakeVxs(tmpVxs), gouraudSpanGen);
            tmpVxs.Clear();
            gouraudSpanGen.SetColor(Drawing.Color.Make(0, 0, 1, alpha),
                                    Drawing.Color.Make(1, 0, 0, alpha),
                                    Drawing.Color.Make(brc, brc, brc, alpha));
            gouraudSpanGen.SetTriangle(m_x[2], m_y[2], m_x[0], m_y[0], x3, y3, d);
            painter.Fill(gouraudSpanGen.MakeVxs(tmpVxs), gouraudSpanGen);
            tmpVxs.Clear();
        }
Пример #5
0
        void RenderWithMiniAgg(Typeface typeface, char testChar, float sizeInPoint)
        {
            //----------------------------------------------------
            var builder  = new MyGlyphPathBuilder(typeface);
            var hintTech = (HintTechnique)cmbHintTechnique.SelectedItem;

            builder.UseTrueTypeInstructions = false; //reset
            builder.UseVerticalHinting      = false; //reset
            switch (hintTech)
            {
            case HintTechnique.TrueTypeInstruction:
                builder.UseTrueTypeInstructions = true;
                break;

            case HintTechnique.TrueTypeInstruction_VerticalOnly:
                builder.UseTrueTypeInstructions = true;
                builder.UseVerticalHinting      = true;
                break;

            case HintTechnique.CustomAutoFit:
                //custom agg autofit
                break;
            }
            //----------------------------------------------------

            builder.Build(testChar, sizeInPoint);

            var vxsShapeBuilder = new GlyphPathBuilderVxs();

            builder.ReadShapes(vxsShapeBuilder);
            VertexStore vxs = vxsShapeBuilder.GetVxs();

            p.UseSubPixelRendering = chkLcdTechnique.Checked;

            //5. use PixelFarm's Agg to render to bitmap...
            //5.1 clear background
            p.Clear(PixelFarm.Drawing.Color.White);

            if (chkFillBackground.Checked)
            {
                //5.2
                p.FillColor = PixelFarm.Drawing.Color.Black;
                //5.3
                if (!chkYGridFitting.Checked)
                {
                    p.Fill(vxs);
                }
            }
            if (chkBorder.Checked)
            {
                //5.4
                // p.StrokeWidth = 3;
                p.StrokeColor = PixelFarm.Drawing.Color.Green;
                //user can specific border width here...
                //p.StrokeWidth = 2;
                //5.5
                p.Draw(vxs);
            }


            float pxScale = builder.GetPixelScale();
            //1. autofit
            var autoFit = new GlyphAutoFit();

            autoFit.Hint(
                builder.GetOutputPoints(),
                builder.GetOutputContours(), pxScale);
            var vxsShapeBuilder2 = new GlyphPathBuilderVxs();

            autoFit.ReadOutput(vxsShapeBuilder2);
            VertexStore vxs2 = vxsShapeBuilder2.GetVxs();

            //
            p.FillColor = PixelFarm.Drawing.Color.Black;
            p.Fill(vxs2);

            if (chkShowTess.Checked)
            {
#if DEBUG
                debugDrawTriangulatedGlyph(autoFit.FitOutput, pxScale);
#endif
            }

            if (chkShowGrid.Checked)
            {
                //render grid
                RenderGrid(800, 600, _gridSize, p);
            }



            //6. use this util to copy image from Agg actual image to System.Drawing.Bitmap
            PixelFarm.Agg.Imaging.BitmapHelper.CopyToGdiPlusBitmapSameSize(destImg, winBmp);
            //---------------
            //7. just render our bitmap
            g.Clear(Color.White);
            g.DrawImage(winBmp, new Point(30, 20));
        }