首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏林德熙的博客

    WPF 使用 RenderTargetBitmap 快速截图出现 COMException 提示

    本文告诉大家一个最简单步骤让 RenderTargetBitmap 出现 COMException 提示 只需要在界面添加一个 ListView 绑定图片,然后在后台不断刷新列表就可以 () 在 System.Windows.Media.Imaging.RenderTargetBitmap..ctor(Int32 pixelWidth, Int32 pixelHeight, Double drawingContext.Close(); var image = new RenderTargetBitmap System.Runtime.InteropServices.COMException (0x88980003): MILERR_WIN32ERROR (Exception from HRESULT: 0x88980003) RenderTargetBitmap RenderTargetBitmapThrowsCOMExceptionWhenCreatedTooFast ---- 本文会经常更新,请阅读原文: https://lindexi.gitee.io/post/WPF-%E4%BD%BF%E7%94%A8-RenderTargetBitmap

    1.8K10发布于 2019-03-13
  • 来自专栏林德熙的博客

    Avalonia 已知问题 使用 RenderTargetBitmap 截图文本模糊

    本文记录 Avalonia 的一个已知问题,使用 RenderTargetBitmap 进行截图时,如果顶层子控件没有设置背景色或背景色是透明色,则截图保存出来的图片里面的文本字符串都是模糊的 此问题能够在 Avalonia 的 11.0-11.3.2 版本复现,更低版本我就没有测试了 出现问题的表现的截图界面图片的文本模糊如下图所示 在 Avalonia 里,使用 RenderTargetBitmap 进行截图,且将图片保存到 1.png 文件里 设置 TakeSnapshotWithFixButton 按钮在点击的时候,先设置 RootGrid 的背景色为白色,然后再使用 RenderTargetBitmap new RenderTargetBitmap(new PixelSize((int) mainView.Bounds.Width, (int) mainView.Bounds.Height), new (AppContext.BaseDirectory, "2.png"); renderTargetBitmap.Save(file, 100); //

    38110编辑于 2025-07-11
  • 来自专栏林德熙的博客

    WPF 从 DrawingVisual 转 BitmapImage 图片

    需要将 DrawingVisual 转为 RenderTargetBitmap 然后将 RenderTargetBitmap 转为 BitmapImage 才可以 先创建一个 DrawingVisual System.Windows.Point(200, 116)); drawingContext.Close(); 写完之后可以将他转换为 RenderTargetBitmap 请看代码 RenderTargetBitmap bmp = new RenderTargetBitmap(宽度, 高度, 96, 96, PixelFormats.Pbgra32 ; bmp.Render(drawingVisual); 需要自己知道截图的宽度和高度才可以,另外这里的 96 是 dpi 的大小 将 DrawingVisual 转 RenderTargetBitmap 就可以通过 PngBitmapEncoder 将 RenderTargetBitmap 转图片 var bitmapImage = new BitmapImage();

    68610编辑于 2022-08-04
  • 来自专栏林德熙的博客

    WPF 图片移除视觉树内存泄漏

    本文告诉大家一个已知问题,在保存图片元素对象时,如果在图片移除视觉树之后再设置图片源为空,那么原有的图片源依然被图片元素引用不会释放 如写一个按钮,在点击事件里面创建 RenderTargetBitmap // 然后新建一个Image控件,并将其Source属性设置为RenderTargetBitmap对象,再呈现出来。 // 再次过程中,RenderTargetBitmap对象从来不会被回收,造成内存泄露。 // 可以从资源管理其中观察到程序的内存持续上涨的现象。 . // Then new a image control and add source to the RenderTargetBitmap object and show it // 则RenderTargetBitmap对象可被回收,不会导致内存泄露。 // 取消注释下面的代码可以观察到上述现象。

    1.4K20发布于 2020-02-17
  • 来自专栏林德熙的博客

    WPF 从 DrawingVisual 转 BitmapImage 图片

    需要将 DrawingVisual 转为 RenderTargetBitmap 然后将 RenderTargetBitmap 转为 BitmapImage 才可以 先创建一个 DrawingVisual System.Windows.Point(200, 116)); drawingContext.Close(); 写完之后可以将他转换为 RenderTargetBitmap 请看代码 RenderTargetBitmap bmp = new RenderTargetBitmap(宽度, 高度, 96, 96, PixelFormats.Pbgra32 ; bmp.Render(drawingVisual); 需要自己知道截图的宽度和高度才可以,另外这里的 96 是 dpi 的大小 将 DrawingVisual 转 RenderTargetBitmap 就可以通过 PngBitmapEncoder 将 RenderTargetBitmap 转图片 var bitmapImage = new BitmapImage();

    1.4K20发布于 2019-03-13
  • 来自专栏林德熙的博客

    WPF 通过 EXIF 设置和读取图片的旋转信息

    而且 WPF 的上层 API 是统一的,屏蔽掉很多细节,不需要更多额外的知识即可使用 先创建一个 DrawingVisual 对象,在这里面传入想要绘制的内容,接着使用 RenderTargetBitmap 需要在实际用到绘制的时候,才会调用 DirectX 进行绘制,例如调用 RenderTargetBitmap 的 Render 方法,将绘制的指令转换为绘制为内存的图片 var dpiScale = VisualTreeHelper.GetDpi(this); var renderTargetBitmap = new RenderTargetBitmap(100, 10, dpiScale.PixelsPerInchX , dpiScale.PixelsPerInchY, PixelFormats.Pbgra32); renderTargetBitmap.Render(drawingVisual 用来编码 var bitmapFrame = BitmapFrame.Create(renderTargetBitmap); jpegBitmapEncoder.Frames.Add

    1.4K10编辑于 2023-04-07
  • 来自专栏林德熙的博客

    WPF 使用 SharpDx 异步渲染

    因为默认的渲染都会让用户感觉软件速度有些慢,不过和这个做法相同的是使用 RenderTargetBitmap ,在另一个线程渲染,然后在主线程显示。 和 RenderTargetBitmap 不同的,本文的方法可以在显卡渲染,渲染性能比 RenderTargetBitmap 高。 多线程渲染 下面告诉大家如何使用 RenderTargetBitmap 多线程渲染 首先创建一个字段,在这个字段为空就需要调用函数创建 private RenderTargetBitmap 实际上 RenderTargetBitmap 可以 Freeze ,所以在另一个线程渲染是可以。 (drawingVisual); renderTargetBitmap.Freeze(); _stouFa = renderTargetBitmap

    1.5K20编辑于 2022-08-04
  • 来自专栏林德熙的博客

    UWP 写入图片 Exif 信息

    RoutedEventArgs e) { await Task.Delay(TimeSpan.FromSeconds(1)); var renderTargetBitmap = new RenderTargetBitmap(); await renderTargetBitmap.RenderAsync(Grid); var encoder.BitmapProperties.SetPropertiesAsync(propertySet); var pixelBuffer = await renderTargetBitmap.GetPixelsAsync var softwareBitmap = SoftwareBitmap.CreateCopyFromBuffer(pixelBuffer, BitmapPixelFormat.Bgra8, renderTargetBitmap.PixelWidth , renderTargetBitmap.PixelHeight); encoder.SetSoftwareBitmap(softwareBitmap);

    1.2K30编辑于 2021-12-24
  • 来自专栏林德熙的博客

    Avalonia 实现离屏渲染能力

    MainView(); mainView.Loaded += (sender, args) => { using var renderTargetBitmap = new RenderTargetBitmap(new PixelSize(1000, 600)); renderTargetBitmap.Render(mainView ); renderTargetBitmap.Save(imageFilePath); taskCompletionSource.SetResult

    10010编辑于 2026-03-27
  • 来自专栏林德熙的博客

    WPF 使用 SharpDx 异步渲染 使用方法绑定渲染为什么空白等待画完异步渲染多线程渲染

    因为默认的渲染都会让用户感觉软件速度有些慢,不过和这个做法相同的是使用 RenderTargetBitmap ,在另一个线程渲染,然后在主线程显示。 和 RenderTargetBitmap 不同的,本文的方法可以在显卡渲染,渲染性能比 RenderTargetBitmap 高。 多线程渲染 下面告诉大家如何使用 RenderTargetBitmap 多线程渲染 首先创建一个字段,在这个字段为空就需要调用函数创建 private RenderTargetBitmap 实际上 RenderTargetBitmap 可以 Freeze ,所以在另一个线程渲染是可以。 (drawingVisual); renderTargetBitmap.Freeze(); _stouFa = renderTargetBitmap

    2.6K30发布于 2018-09-18
  • 来自专栏林德熙的博客

    WPF 尝试使用 WinML 做一个简单的手写数字识别应用

    set; } 在点击识别按钮,就需要将 InkCanvas 内容转换为 Windows.Media.VideoFrame 对象,用于传入到模型里面进行识别 在 WPF 里面对控件进行截图,可以使用 RenderTargetBitmap InkCanvas.ActualWidth; var height = (int) InkCanvas.ActualHeight; var bitmapSource = new RenderTargetBitmap 创建 SoftwareBitmap 可以从像素数组进行创建,获取 RenderTargetBitmap 的像素数组的方法可以是先开辟一个缓存空间,让 RenderTargetBitmap 将像素数组写入到缓存空间里面 在 WPF 里面,渲染不是实时发生的,换句话说是如果你不从 RenderTargetBitmap 里面让其输出像素数组,实际上内部是没有干多少活的 var stride = bitmapSource.PixelWidth InkCanvas.ActualWidth; var height = (int) InkCanvas.ActualHeight; var bitmapSource = new RenderTargetBitmap

    1K10编辑于 2023-12-11
  • 来自专栏林德熙的博客

    win10 uwp 截图 获取屏幕显示界面保存图片 水印

    UWP有一个功能,可以截图,截图使用的类是 RenderTargetBitmap 我们首先写一个Grid,我们需要给他名字,我这里给他Stamp,需要名称可以让我们在后面使用截图用到元素。 然后我们可以使用RenderTargetBitmap保存我们屏幕Grid显示的元素,请看下面代码 var bitmap = new RenderTargetBitmap();

    1.7K10发布于 2018-09-18
  • 来自专栏林德熙的博客

    WPF 解决 ViewBox 不显示线的问题

    wpf 截图 可以使用下面代码截图,width 是图片像素宽度,height是高度 var bitmap = new RenderTargetBitmap(width, height bounds.Width); var height = (int) Math.Round(bounds.Height); var bitmap = new RenderTargetBitmap

    89020编辑于 2022-08-04
  • 来自专栏林德熙的博客

    wpf 如何使用 Magick.NET 播放 gif 图片

    var width = t.Width; var height = t.Height; RenderTargetBitmap image = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);

    1.1K30发布于 2019-03-13
  • 来自专栏林德熙的博客

    wpf VisualBrush 已知问题

    如果元素绑定 VisualBrush 然后对元素使用 RenderTargetBitmap 就会让 VisualBrush 无法使用。

    82310发布于 2018-09-18
  • 来自专栏林德熙的博客

    wpf 如何使用 Magick.NET 播放 gif 图片 安装 Magick.NET解析 gif播放 gif

    var width = t.Width; var height = t.Height; RenderTargetBitmap image = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);

    1.4K20发布于 2018-09-18
  • 来自专栏码客

    WPF图片处理相关

    System.Windows.Controls.Image 展示图片的组件 ImageSource BitmapSource 继承于ImageSource BitmapImage 继承于BitmapSource RenderTargetBitmap --该图片控件用于展示截图图片效果--> <Image x:Name="img" /> C# RenderTargetBitmap bitmap = new RenderTargetBitmap(); enc.Save(outStream); Bitmap bitmap = new Bitmap(outStream); return new Bitmap(bitmap); } } RenderTargetBitmap =>BitmapImage // RenderTargetBitmap --> BitmapImage public static BitmapImage ConvertRenderTargetBitmapToBitmapImage (RenderTargetBitmap wbm) { BitmapImage bmp = new BitmapImage(); using (MemoryStream stream = new

    4.3K31发布于 2020-08-12
  • 来自专栏林德熙的博客

    WPF 解决 ViewBox 不显示线的问题

    wpf 截图 可以使用下面代码截图,width 是图片像素宽度,height是高度 var bitmap = new RenderTargetBitmap(width, height bounds.Width); var height = (int) Math.Round(bounds.Height); var bitmap = new RenderTargetBitmap

    1.8K10发布于 2018-09-19
  • 来自专栏林德熙的博客

    wpf VisualBrush 已知问题

    如果元素绑定 VisualBrush 然后对元素使用 RenderTargetBitmap 就会让 VisualBrush 无法使用。

    54930发布于 2019-03-13
  • 来自专栏林德熙的博客

    win10 uwp 读取保存WriteableBitmap 、BitmapImage 保存 WriteableBitmap 到文件从文件读 WriteableBitmapIma

    WriteableBitmap ,我们可以使用截图 private async Task<string> ToBase64(Image control) { var bitmap = new RenderTargetBitmap decoder.PixelWidth, (uint)decoder.PixelHeight, decoder.DpiX, decoder.DpiY); } private async Task<string> ToBase64(RenderTargetBitmap

    2.4K10发布于 2018-09-18
领券