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)); }
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)); }
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"); }
//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(); }
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)); }