Exemplo n.º 1
0
        public override void Draw(CGRect rect)
        {
            base.Draw(rect);

            var screenScale = UIScreen.MainScreen.Scale;
            var width       = (int)(Bounds.Width * screenScale);
            var height      = (int)(Bounds.Height * screenScale);

            IntPtr buff = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(width * height * 4);

            try {
                using (var surface = SKSurface.Create(width, height, SKColorType.Rgba8888 /*N_32*/, SKAlphaType.Premul, buff, width * 4)) {
                    var skcanvas = surface.Canvas;
                    skcanvas.Scale((float)screenScale, (float)screenScale);
                    using (new SKAutoCanvasRestore(skcanvas, true)) {
                        _tateView.SendDraw(skcanvas);
                    }
                }

                using (var colorSpace = CGColorSpace.CreateDeviceRGB())
                    using (var bContext = new CGBitmapContext(buff, width, height, 8, width * 4, colorSpace, (CGImageAlphaInfo)bitmapInfo))
                        using (var image = bContext.ToImage())
                            using (var context = UIGraphics.GetCurrentContext()) {
                                // flip the image for CGContext.DrawImage
                                context.TranslateCTM(0, Frame.Height);
                                context.ScaleCTM(1, -1);
                                context.DrawImage(Bounds, image);
                            }
            } finally {
                if (buff != IntPtr.Zero)
                {
                    System.Runtime.InteropServices.Marshal.FreeCoTaskMem(buff);
                }
            }
        }
Exemplo n.º 2
0
        protected override void OnDraw(Android.Graphics.Canvas canvas)
        {
            base.OnDraw(canvas);

            if (_bitmap == null || _bitmap.Width != canvas.Width || _bitmap.Height != canvas.Height)
            {
                if (_bitmap != null)
                {
                    _bitmap.Dispose();
                }

                _bitmap = Bitmap.CreateBitmap(canvas.Width, canvas.Height, Bitmap.Config.Argb8888);
            }

            try
            {
                using (var surface = SKSurface.Create(canvas.Width, canvas.Height, SKColorType.Rgba8888 /*N_32*/, SKAlphaType.Premul, _bitmap.LockPixels(), canvas.Width * 4)) {
                    var skcanvas = surface.Canvas;
                    skcanvas.Scale(((float)canvas.Width) / (float)_tategumiView.Width, ((float)canvas.Height) / (float)_tategumiView.Height);
                    _tateView.SendDraw(skcanvas);
                }
            }
            finally {
                _bitmap.UnlockPixels();
            }

            canvas.DrawBitmap(_bitmap, 0, 0, null);
        }