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); }
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); }
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); } }
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; }