Ejemplo n.º 1
0
        void RunSampleA(PixelFarm.Drawing.Painter p)
        {
            //1. create simple vertical line to test agg's lcd rendernig technique
            //create gray-scale actual image
            ActualImage      glyphImg = new ActualImage(100, 100, PixelFormat.ARGB32);
            AggRenderSurface glyph2d  = new AggRenderSurface(glyphImg);
            AggPainter       painter  = new AggPainter(glyph2d);

            painter.StrokeColor = PixelFarm.Drawing.Color.Black;
            painter.StrokeWidth = 2.0f * 3;
            int x = 10, y = 10;

            painter.DrawLine(x * 3, 0, y * 3, 20); //scale horizontal 3 times,
            int lineLen = 4;


            //painter.Line(x * 3, 0, y * 3, 20); //scale horizontal 3 times,
            //painter.Line(2, 0, 2, 15);
            //painter.Line(2, 0, 20, 20);
            //painter.Line(2, 0, 30, 15);
            //painter.Line(2, 0, 30, 5);
            //clear surface bg
            p.Clear(PixelFarm.Drawing.Color.White);
            //draw img into that bg
            //---------------
            //convert glyphImg from RGBA to grey Scale buffer
            //---------------
            //lcd process ...
            byte[] glyphGreyScale = CreateGreyScaleBuffer(glyphImg);
            //---------------

            //swap gray scale
            int newGreyImgStride;

            byte[] expanedGreyScaleBuffer = CreateNewExpandedLcdGrayScale(glyphGreyScale, glyphImg.Width, glyphImg.Height, out newGreyImgStride);

            //blend lcd
            var aggPainer = (PixelFarm.Agg.AggPainter)p;

            Blend(aggPainer.RenderSurface.DestActualImage, expanedGreyScaleBuffer, newGreyImgStride, glyphImg.Height);
            //---------------
            p.DrawImage(glyphImg, 0, 50);
        }
Ejemplo n.º 2
0
        void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args)
        {
            SKImageInfo info    = args.Info;
            SKSurface   surface = args.Surface;
            SKCanvas    canvas  = surface.Canvas;

            canvas.Clear();

            //get image buffer from info
            if (_needContentUpdate)
            {
                _painter.Clear(PixelFarm.Drawing.Color.Yellow);
                _painter.StrokeColor = PixelFarm.Drawing.Color.Red;
                _painter.StrokeWidth = 2;
                _painter.DrawLine(0, 0, 100, 100);
                _needContentUpdate = false;
            }
            //draw entire bmp or draw some part of it
            canvas.DrawBitmap(_myCanvasBmp, 0, 0);
        }
Ejemplo n.º 3
0
 void RunSampleB(PixelFarm.Drawing.Painter p)
 {
     //version 2:
     //1. create simple vertical line to test agg's lcd rendernig technique
     //create gray-scale actual image
     using (MemBitmap glyphBmp = new MemBitmap(100, 100))
     {
         AggPainter painter = AggPainter.Create(glyphBmp);
         //
         painter.StrokeColor = PixelFarm.Drawing.Color.Black;
         painter.StrokeWidth = 2.0f;
         painter.DrawLine(2, 0, 3, 15); //not need to scale3
                                        //
                                        //clear surface bg
         p.Clear(PixelFarm.Drawing.Color.White);
         //--------------------------
         var aggPainer = (PixelFarm.CpuBlit.AggPainter)p;
         BlendWithLcdTechnique(aggPainer.RenderSurface.DestBitmap, glyphBmp, PixelFarm.Drawing.Color.Black);
         //---------------
         p.DrawImage(glyphBmp, 0, 50);
         //---------------
     }
 }
Ejemplo n.º 4
0
        void RunSampleB(PixelFarm.Drawing.Painter p)
        {
            //version 2:
            //1. create simple vertical line to test agg's lcd rendernig technique
            //create gray-scale actual image
            ActualImage      glyphImg = new ActualImage(100, 100, PixelFormat.ARGB32);
            AggRenderSurface glyph2d  = new AggRenderSurface(glyphImg);
            AggPainter       painter  = new AggPainter(glyph2d);

            //
            painter.StrokeColor = PixelFarm.Drawing.Color.Black;
            painter.StrokeWidth = 2.0f;
            painter.DrawLine(2, 0, 3, 15);//not need to scale3
            //
            //clear surface bg
            p.Clear(PixelFarm.Drawing.Color.White);
            //--------------------------
            var aggPainer = (PixelFarm.Agg.AggPainter)p;

            BlendWithLcdTechnique(aggPainer.RenderSurface.DestActualImage, glyphImg, PixelFarm.Drawing.Color.Black);
            //---------------
            p.DrawImage(glyphImg, 0, 50);
            //---------------
        }
Ejemplo n.º 5
0
        void DrawStringToMemBitmap(RequestFont reqFont, string textOutput, float x_pos, float y_pos, int repeatLines = 1)
        {
            ResolvedFont resolvedFont = _textService.ResolveFont(reqFont);

            if (resolvedFont == null)
            {
                //we dont' have
                resolvedFont = _textService.ResolveFont(_defaultReqFont);
                if (resolvedFont == null)
                {
                    throw new NotSupportedException();
                }

                //use alternative typeface, but use reqFont's Size
                resolvedFont = new ResolvedFont(resolvedFont.Typeface, reqFont.SizeInPoints);
            }

            //check if reqFont has alternative or not

            _myAlternativeTypefaceSelector.SetCurrentReqFont(reqFont, _textService);

            PixelFarm.Drawing.VxsTextSpanPrinter _selectedTextPrinter = _devVxsTextPrinter;
            _painter.UseLcdEffectSubPixelRendering = true;
            _painter.FillColor = PixelFarm.Drawing.Color.Black;

            _selectedTextPrinter = _devVxsTextPrinter;

            _selectedTextPrinter.FontSizeInPoints  = resolvedFont.SizeInPoints;
            _selectedTextPrinter.Typeface          = resolvedFont.Typeface;
            _selectedTextPrinter.ScriptLang        = new ScriptLang(ScriptTagDefs.Latin.Tag);
            _selectedTextPrinter.PositionTechnique = PositionTechnique.OpenFont;

            _selectedTextPrinter.HintTechnique  = HintTechnique.None;
            _selectedTextPrinter.EnableLigature = true;
            _selectedTextPrinter.SimulateSlant  = false;

            _selectedTextPrinter.EnableMultiTypefaces = true; //*** for auto typeface selection***

            //_selectedTextPrinter.TextBaseline = PixelFarm.Drawing.TextBaseline.Alphabetic;
            //_selectedTextPrinter.TextBaseline = PixelFarm.Drawing.TextBaseline.Bottom;
            _selectedTextPrinter.TextBaseline = (Typography.Text.TextBaseline)PixelFarm.Drawing.TextBaseline.Top;

            //test print 3 lines
            //#if DEBUG
            //            DynamicOutline.dbugTestNewGridFitting = _contourAnalysisOpts.EnableGridFit;
            //            DynamicOutline.dbugActualPosToConsole = _contourAnalysisOpts.WriteFitOutputToConsole;
            //            DynamicOutline.dbugUseHorizontalFitValue = _contourAnalysisOpts.UseHorizontalFitAlignment;
            //#endif


            char[] printTextBuffer = textOutput.ToCharArray();


            float lineSpacingPx = _selectedTextPrinter.FontLineSpacingPx;

            const int REF_LINE_LEN = 300;

            for (int i = 0; i < repeatLines; ++i)
            {
                _selectedTextPrinter.DrawString(printTextBuffer, x_pos, y_pos);
#if DEBUG
                //show debug info...
                var prevColor      = _painter.FillColor;
                var prevStrokColor = _painter.StrokeColor;
                _painter.FillColor = PixelFarm.Drawing.Color.Red;
                _painter.FillRect(x_pos, y_pos, 5, 5); // start point

                //see   //https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/textBaseline
                switch (_selectedTextPrinter.TextBaseline)
                {
                default:
                {
                    System.Diagnostics.Debug.WriteLine("UNIMPLEMENTED" + _selectedTextPrinter.TextBaseline.ToString());
                    goto case Typography.Text.TextBaseline.Alphabetic;        //
                }

                case Typography.Text.TextBaseline.Alphabetic:
                {
                    //alphabetic baseline
                    _painter.StrokeColor = _grayColor;
                    _painter.DrawLine(x_pos, /**/ y_pos,
                                      x_pos + REF_LINE_LEN, y_pos);

                    _painter.StrokeColor = PixelFarm.Drawing.Color.Blue;
                    _painter.DrawLine(x_pos, /**/ y_pos - _selectedTextPrinter.FontDescedingPx,
                                      x_pos + REF_LINE_LEN, y_pos - _selectedTextPrinter.FontDescedingPx);        //bottom most
                }
                break;

                case Typography.Text.TextBaseline.Top:
                {
                    //alphabetic baseline
                    _painter.StrokeColor = _grayColor;
                    _painter.DrawLine(x_pos, /**/ y_pos + _selectedTextPrinter.FontAscendingPx,
                                      x_pos + REF_LINE_LEN, y_pos + _selectedTextPrinter.FontAscendingPx);
                    //em bottom
                    _painter.StrokeColor = PixelFarm.Drawing.Color.Blue;
                    _painter.DrawLine(x_pos, /**/ y_pos + (_selectedTextPrinter.FontAscendingPx - _selectedTextPrinter.FontDescedingPx),
                                      x_pos + REF_LINE_LEN, y_pos + (_selectedTextPrinter.FontAscendingPx - _selectedTextPrinter.FontDescedingPx));        //bottom most
                }
                break;

                case Typography.Text.TextBaseline.Bottom:
                {
                    //alphabetic baseline
                    _painter.StrokeColor = _grayColor;
                    _painter.DrawLine(x_pos, /**/ y_pos + _selectedTextPrinter.FontDescedingPx,
                                      x_pos + REF_LINE_LEN, y_pos + _selectedTextPrinter.FontDescedingPx);
                    //em bottom
                    _painter.StrokeColor = PixelFarm.Drawing.Color.Blue;
                    _painter.DrawLine(x_pos, /**/ y_pos,
                                      x_pos + REF_LINE_LEN, y_pos);        //bottom most
                }
                break;
                }


                _painter.FillColor   = prevColor;
                _painter.StrokeColor = prevColor;
#endif
                y_pos += (_selectedTextPrinter.FontAscendingPx - _selectedTextPrinter.FontDescedingPx);
            }

            //reset
            _myAlternativeTypefaceSelector.SetCurrentReqFont(null, null);
        }
Ejemplo n.º 6
0
        void UpdateRenderOutput()
        {
            if (!_readyToRender)
            {
                return;
            }
            //
            if (_g == null)
            {
                InitGraphics();
            }

            if (string.IsNullOrEmpty(this.txtInputChar.Text))
            {
                return;
            }

            //test option use be used with lcd subpixel rendering.
            //this demonstrate how we shift a pixel for subpixel rendering tech

            if (_contourAnalysisOpts.SetupPrinterLayoutForLcdSubPix)
            {
                //TODO: set lcd or not here
            }
            else
            {
                //TODO: set lcd or not here
            }

            //1. read typeface from font file
            TypographyTest.RenderChoice renderChoice = _basicOptions.RenderChoice;
            switch (renderChoice)
            {
            case TypographyTest.RenderChoice.RenderWithGdiPlusPath:
                //not render in this example
                //see more at ...
                break;

            case TypographyTest.RenderChoice.RenderWithTextPrinterAndMiniAgg:
            {
                //clear previous draw
                _painter.Clear(PixelFarm.Drawing.Color.White);
                _painter.UseLcdEffectSubPixelRendering = _contourAnalysisOpts.LcdTechnique;
                _painter.FillColor = PixelFarm.Drawing.Color.Black;

                _selectedTextPrinter                   = _devVxsTextPrinter;
                _selectedTextPrinter.Typeface          = _basicOptions.Typeface;
                _selectedTextPrinter.FontSizeInPoints  = _basicOptions.FontSizeInPoints;
                _selectedTextPrinter.ScriptLang        = _basicOptions.ScriptLang;
                _selectedTextPrinter.PositionTechnique = _basicOptions.PositionTech;


                if (_selectedTextPrinter is PixelFarm.Drawing.VxsTextSpanPrinter vxsTextPrinter)
                {
                    vxsTextPrinter.HintTechnique = _glyphRenderOptions.HintTechnique;
                }
                _selectedTextPrinter.EnableLigature       = _glyphRenderOptions.EnableLigature;
                _selectedTextPrinter.EnableMultiTypefaces = _basicOptions.EnableMultiTypefaces;
                _selectedTextPrinter.SimulateSlant        = _contourAnalysisOpts.SimulateSlant;
                _selectedTextPrinter.TextBaseline         = (Typography.Text.TextBaseline)(int) lstTextBaseline.SelectedItem;



                //test print 3 lines
#if DEBUG
                DynamicOutline.dbugTestNewGridFitting    = _contourAnalysisOpts.EnableGridFit;
                DynamicOutline.dbugActualPosToConsole    = _contourAnalysisOpts.WriteFitOutputToConsole;
                DynamicOutline.dbugUseHorizontalFitValue = _contourAnalysisOpts.UseHorizontalFitAlignment;
#endif

                char[] printTextBuffer = this.txtInputChar.Text.ToCharArray();
                float  x_pos = 0, y_pos = 0;
                float  lineSpacingPx = _selectedTextPrinter.FontLineSpacingPx;

                const int REF_LINE_LEN = 300;
                for (int i = 0; i < 3; ++i)
                {
                    _selectedTextPrinter.DrawString(printTextBuffer, x_pos, y_pos);
#if DEBUG
                    //show debug info...
                    var prevColor      = _painter.FillColor;
                    var prevStrokColor = _painter.StrokeColor;
                    _painter.FillColor = PixelFarm.Drawing.Color.Red;
                    _painter.FillRect(x_pos, y_pos, 5, 5);         // start point

                    //see   //https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/textBaseline
                    switch (_selectedTextPrinter.TextBaseline)
                    {
                    default:
                    {
                        System.Diagnostics.Debug.WriteLine("UNIMPLEMENTED" + _selectedTextPrinter.TextBaseline.ToString());
                        goto case Typography.Text.TextBaseline.Alphabetic;                //
                    }

                    case Typography.Text.TextBaseline.Alphabetic:
                    {
                        //alphabetic baseline
                        _painter.StrokeColor = _grayColor;
                        _painter.DrawLine(x_pos, /**/ y_pos,
                                          x_pos + REF_LINE_LEN, y_pos);

                        _painter.StrokeColor = PixelFarm.Drawing.Color.Blue;
                        _painter.DrawLine(x_pos, /**/ y_pos - _selectedTextPrinter.FontDescedingPx,
                                          x_pos + REF_LINE_LEN, y_pos - _selectedTextPrinter.FontDescedingPx);                //bottom most
                    }
                    break;

                    case Typography.Text.TextBaseline.Top:
                    {
                        //alphabetic baseline
                        _painter.StrokeColor = _grayColor;
                        _painter.DrawLine(x_pos, /**/ y_pos + _selectedTextPrinter.FontAscendingPx,
                                          x_pos + REF_LINE_LEN, y_pos + _selectedTextPrinter.FontAscendingPx);
                        //em bottom
                        _painter.StrokeColor = PixelFarm.Drawing.Color.Blue;
                        _painter.DrawLine(x_pos, /**/ y_pos + (_selectedTextPrinter.FontAscendingPx - _selectedTextPrinter.FontDescedingPx),
                                          x_pos + REF_LINE_LEN, y_pos + (_selectedTextPrinter.FontAscendingPx - _selectedTextPrinter.FontDescedingPx));                //bottom most
                    }
                    break;

                    case Typography.Text.TextBaseline.Bottom:
                    {
                        //alphabetic baseline
                        _painter.StrokeColor = _grayColor;
                        _painter.DrawLine(x_pos, /**/ y_pos + _selectedTextPrinter.FontDescedingPx,
                                          x_pos + REF_LINE_LEN, y_pos + _selectedTextPrinter.FontDescedingPx);
                        //em bottom
                        _painter.StrokeColor = PixelFarm.Drawing.Color.Blue;
                        _painter.DrawLine(x_pos, /**/ y_pos,
                                          x_pos + REF_LINE_LEN, y_pos);                //bottom most
                    }
                    break;
                    }


                    _painter.FillColor   = prevColor;
                    _painter.StrokeColor = prevColor;
#endif
                    y_pos += (_selectedTextPrinter.FontAscendingPx - _selectedTextPrinter.FontDescedingPx);
                }


                //copy from Agg's memory buffer to gdi
                PixelFarm.CpuBlit.BitmapHelper.CopyToGdiPlusBitmapSameSizeNotFlip(_destImg, _winBmp);
                _g.Clear(Color.White);
                _g.DrawImage(_winBmp, new Point(0, 0));
            }
            break;

            //==============================================
            //render 1 glyph for debug and test
            case TypographyTest.RenderChoice.RenderWithMsdfGen:
            case TypographyTest.RenderChoice.RenderWithSdfGen:
            {
                char     testChar = this.txtInputChar.Text[0];
                Typeface typeFace = _basicOptions.Typeface;
                RenderWithMsdfImg(typeFace, testChar, _basicOptions.FontSizeInPoints);
            }
            break;

            case TypographyTest.RenderChoice.RenderWithMiniAgg_SingleGlyph:
            {
                _selectedTextPrinter = _devVxsTextPrinter;
                //for test only 1 char
                RenderSingleCharWithMiniAgg(
                    _basicOptions.Typeface,
                    this.txtInputChar.Text[0],
                    _basicOptions.FontSizeInPoints);
            }
            break;

            default:
                throw new NotSupportedException();
            }
        }