Exemplo n.º 1
0
        unsafe bool Close()
        {
            CloseGroup();
            if (image != null)
            {
                Control.Close();
                var handler = (BitmapHandler)image.Handler;
                var bmp     = image.ToWpf();
                var newbmp  = new swmi.RenderTargetBitmap(bmp.PixelWidth, bmp.PixelHeight, bmp.DpiX, bmp.DpiY, swm.PixelFormats.Pbgra32);
                newbmp.RenderWithCollect(visual);
                if (!bmp.Format.HasAlpha())
                {
                    // convert to non-alpha, as RenderTargetBitmap does not support anything other than Pbgra32
                    var wb     = new swmi.WriteableBitmap(bmp.PixelWidth, bmp.PixelHeight, bmp.DpiX, bmp.DpiY, swm.PixelFormats.Bgr32, null);
                    var rect   = new sw.Int32Rect(0, 0, bmp.PixelWidth, bmp.PixelHeight);
                    var pixels = new byte[bmp.PixelHeight * wb.BackBufferStride];
                    newbmp.CopyPixels(rect, pixels, wb.BackBufferStride, 0);
                    fixed(byte *ptr = pixels)
                    {
                        wb.WritePixels(rect, (IntPtr)ptr, pixels.Length, wb.BackBufferStride, 0, 0);
                    }

                    handler.SetBitmap(wb);
                }
                else
                {
                    handler.SetBitmap(newbmp);
                }
                return(true);
            }
            return(false);
        }
Exemplo n.º 2
0
 bool Close()
 {
     CloseGroup();
     if (image != null)
     {
         Control.Close();
         var handler = (BitmapHandler)image.Handler;
         var bmp     = image.ToWpf();
         var newbmp  = new swmi.RenderTargetBitmap(bmp.PixelWidth, bmp.PixelHeight, bmp.DpiX, bmp.DpiY, swm.PixelFormats.Pbgra32);
         newbmp.RenderWithCollect(visual);
         handler.SetBitmap(newbmp);
         return(true);
     }
     return(false);
 }
Exemplo n.º 3
0
        public void Clear(SolidBrush brush)
        {
            var rect = clipBounds ?? initialClip;

            if (drawingVisual != null)
            {
                // bitmap
                Control.Close();
                var newbmp = new swmi.RenderTargetBitmap((int)bounds.Width, (int)bounds.Height, 96, 96, swm.PixelFormats.Pbgra32);
                newbmp.RenderWithCollect(visual);

                swm.Geometry maskgeometry;
                if (clipPath != null)
                {
                    maskgeometry = clipPath;
                }
                else
                {
                    maskgeometry = new swm.RectangleGeometry(rect.ToWpf());
                }
                var boundsgeometry = new swm.RectangleGeometry(bounds);
                maskgeometry = swm.Geometry.Combine(boundsgeometry, maskgeometry, swm.GeometryCombineMode.Exclude, null);
                var dr = new swm.GeometryDrawing(swm.Brushes.Black, null, maskgeometry);
                var db = new swm.DrawingBrush(dr);
                //db.Transform = new swm.TranslateTransform (0.5, 0.5);

                Control = drawingVisual.RenderOpen();
                Control.PushGuidelineSet(new swm.GuidelineSet(new [] { bounds.Left, bounds.Right }, new [] { bounds.Top, bounds.Bottom }));
                Control.PushOpacityMask(db);
                Control.DrawImage(newbmp, bounds);
                Control.Pop();

                ApplyAll();
            }
            else
            {
                // drawable
                if (brush == null || brush.Color.A < 1.0f)
                {
                    Widget.FillRectangle(Brushes.Black, rect);
                }
            }
            if (brush != null)
            {
                Widget.FillRectangle(brush, rect);
            }
        }
Exemplo n.º 4
0
        public void Create(Image image, int width, int height, ImageInterpolation interpolation)
        {
            var source = image.ToWpf(1, new Size(width, height));
            // use drawing group to allow for better quality scaling
            var group = new swm.DrawingGroup();

            swm.RenderOptions.SetBitmapScalingMode(group, interpolation.ToWpf());
            group.Children.Add(new swm.ImageDrawing(source, new sw.Rect(0, 0, width, height)));

            var drawingVisual = new swm.DrawingVisual();

            using (var drawingContext = drawingVisual.RenderOpen())
                drawingContext.DrawDrawing(group);

            var resizedImage = new swmi.RenderTargetBitmap(width, height, source.DpiX, source.DpiY, swm.PixelFormats.Default);

            resizedImage.RenderWithCollect(drawingVisual);
            Control = resizedImage;
        }