public static async Task<MemoryStream> RenderToPngStream(FrameworkElement fe) { using (var engine = new CompositionEngine()) { return await engine.RenderToPngStream(fe); } }
//Do not use the below extension as it is slower than the one that follows //public static async Task Render(this WriteableBitmap wb, FrameworkElement fe) //{ // var ms = await RenderToPngStream(fe); // using (var msrandom = new MemoryRandomAccessStream(ms)) // { // await wb.SetSourceAsync(msrandom); // } //} public static async Task<WriteableBitmap> Render(FrameworkElement fe) { using (var engine = new CompositionEngine()) { return await engine.RenderToWriteableBitmap(fe); } }
public static async Task <MemoryStream> RenderToPngStream(FrameworkElement fe) { using (var engine = new CompositionEngine()) { return(await engine.RenderToPngStream(fe)); } }
//Do not use the below extension as it is slower than the one that follows //public static async Task Render(this WriteableBitmap wb, FrameworkElement fe) //{ // var ms = await RenderToPngStream(fe); // using (var msrandom = new MemoryRandomAccessStream(ms)) // { // await wb.SetSourceAsync(msrandom); // } //} public static async Task <WriteableBitmap> Render(FrameworkElement fe) { using (var engine = new CompositionEngine()) { return(await engine.RenderToWriteableBitmap(fe)); } }
public static async Task <D2D.Bitmap1> ToSharpDX(this ImageSource imageSource, D2D.RenderTarget renderTarget) { var wb = imageSource as Jupiter.Media.Imaging.WriteableBitmap; if (wb == null) { var bi = imageSource as Jupiter.Media.Imaging.BitmapImage; if (bi == null) { return(null); } wb = await WriteableBitmapFromBitmapImageExtension.FromBitmapImage(bi); if (wb == null) { return(null); } } int width = wb.PixelWidth; int height = wb.PixelHeight; //var cpuReadBitmap = CompositionEngine.CreateCpuReadBitmap(width, height); var cpuReadBitmap = CompositionEngine.CreateRenderTargetBitmap(width, height); //var mappedRect = cpuReadBitmap.Map(D2D.MapOptions.Write | D2D.MapOptions.Read | D2D.MapOptions.Discard); using (var readStream = wb.PixelBuffer.AsStream()) { var pitch = width * 4; //using (var writeStream = // new DataStream( // userBuffer: mappedRect.DataPointer, // sizeInBytes: mappedRect.Pitch * height, // canRead: false, // canWrite: true)) { var buffer = new byte[pitch * height]; readStream.Read(buffer, 0, buffer.Length); cpuReadBitmap.CopyFromMemory(buffer, pitch); //for (int i = 0; i < height; i++) //{ // readStream.Read(buffer, 0, mappedRect.Pitch); // writeStream.Write(buffer, 0, buffer.Length); //} } } //cpuReadBitmap.CopyFromMemory(); return(cpuReadBitmap); }