问题标签 [rendertargetbitmap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1081 浏览

wpf - Web 服务器上 Viewport3D 的 wpf RenderTargetBitmap(屏幕外)

我正在屏幕外创建一个 Viewport3D (CurViewport3D) 并仅用一个平面填充它(用于测试目的)。

通过 RenderTargetBitmap 和 BitmapEncoder 创建此视口内容(作为 jpg)的 MemoryStream。整个功能都放在一个库 (dll) 中,因为我想在 Web 服务器上使用这个库来创建一个要在网站上显示的图像。

下面的代码被简化为基础,但它正在工作。

这是网站的代码:

以及背后的代码:

很简单!

现在的问题是:本地一切正常。图像显示在浏览器中 - 完美。一旦我尝试在 Web 服务器(Microsoft Server 2008)上运行它,浏览器中显示的图像是空的,没有内容。没有错误。

有谁知道如何让它在网络服务器上运行?

0 投票
3 回答
1137 浏览

wpf - 多线程图像合成

我正在使用 WPF 成像来使用 DrawingVisual 将文本、3d 图形和图像合成在一起。然后将结果呈现为 RenderTargetBitmap 并以 jpeg 格式保存到磁盘。所有这些都发生在没有可视窗口的代码中。

只要我一次只尝试做一件事,它就可以很好地工作。但是,我想看看是否可以通过使用多个线程进行渲染来加快速度。每个线程都使用一个创建自己的 DrawingContext、DrawingVisual 等的对象。但是,当我尝试并行访问它们时,显然在某处存在一些共享状态,因为我得到了虚假错误。有时它是“调用线程无法访问此对象,因为另一个线程创建了它”。其他时候,当我添加指向 3D 几何图形时,从 WPF 的内部冒出的 NullReferenceExceptions 看起来更邪恶。

有没有办法确保每个线程与 WPF 保持隔离?还是共享状态是不可避免的?

0 投票
3 回答
4525 浏览

c# - DrawingContext 到位图文件

我有一个 DrawingContext(Visual 或 DrawingGroup 的一部分),我在其中绘制一堆矩形和/或 1 位图像。把它想象成一个掩蔽的 1 位图像。我想将其转换为位图图像文件。

使用RenderTargetBitmap不是一个选项,因为它只能以 32 位像素格式渲染,所以如果我必须渲染一个 20MB 的 1 位图像,我最终会在我的堆上获得 640MB (20*32) 的内存。这当然会产生巨大的 LOH 碎片,并且应用程序在第二次拍摄时内存不足。

所以,我基本上需要一种有效地从绘图上下文写入 1 位位图文件的方法。任何想法/建议/替代方法将不胜感激。

0 投票
2 回答
2534 浏览

c# - 如何让 RenderTargetBitmap 和 VisualBrush 一起玩得很好?

我的要求:

  • 处理自定义图像逻辑的持久性UserControl,例如地图或绘图
  • 一组容器,用于在缩放或平移移动期间对图像进行缓存
  • VisualBrushUserControl我可以添加到容器中以与效果一起使用的副本

我目前使用 RenderTargetBitmap 实现图像缓存,但这似乎与我正在使用的VisualBrush-covered对象有问题。Rectangle

我的问题:我可以在此代码中添加/更改什么以使VisualBrush对象在使用后正确呈现RenderTargetBitmap?是什么奇怪的事情RenderTargetBitmap使人VisualBrush看不见?

如果没有大量代码,我无法重现这个问题。

在我的 xaml 文件中,我有:

和 .xaml.cs:

关于代码的一些帮助说明:

  • xaml_contentContainer用于HardCopy()将当前图像复制到图像缓存中,_back.
  • SoftCopy返回一个与过去一模一样的 FrameworkElement,但没有任何变换、效果或视觉父级。这个非常重要。
  • BuildImage模拟在初始图像以某种方式转换后构建要粘贴到缓存上的新图像。

如果您构建并运行SoftCopy()从 中删除 的应用程序_body.Children.Add(SoftCopy(Control));,您会看到我想要获得的效果:新元素粘贴在旧元素上方,而旧元素似乎保留了它的变换。

var rtb = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);或者,如果您从中删除该行HardCopy,缓存功能将被破坏,但 SoftCopy 会正确显示。

但是,如果您按原样运行应用程序,您会注意到新的 BlueRectangle(通过 VisualBrush 呈现)根本不会显示,直到您再次点击“新建”按钮,将图像推送到缓存,并且仍然没有向您显示新创建的图像。

0 投票
1 回答
495 浏览

wpf - 将 WPF 画布呈现为特定大小的位图

我有一个想要制作位图的 WPF 画布。

具体来说,我想在 300dpi 位图上渲染它的实际大小。画布上对象的“实际大小”在现实生活中是 10 个设备独立像素= 1"。理论上,WPF 设备独立像素为 96dpi。

我花了几天的时间试图让它发挥作用,但我感到困惑。

我的理解是,一般程序大致是:

并且我需要将画布的 LayoutTransform 设置为 ScaleTransform 吗?SomeOtherFactor?然后对画布进行测量和排列到?SomeDesiredSize?

我坚持的是什么用于?SomeFactor?,?SomeOtherFactor?和?SomeDesiredSize?使这项工作。 MSDN 文档没有说明要使用哪些因素。

0 投票
2 回答
23247 浏览

c# - 将 RenderTargetBitmap 转换为 BitmapImage

我有一个RenderTargetBitmap,我需要将其转换为BitmapImage. 请检查下面的代码。

在上面的代码中,我使用了 Image。现在我需要使用 BitmapImage。我怎样才能做到这一点?

0 投票
2 回答
15951 浏览

wpf - 使用 RenderTargetBitmap 的 WPF 画布区域的快照

我想在我的应用程序中创建画布区域的快照。我正在使用视觉画笔来获取快照并使用 PngEncoder 保存它。但生成的 PNG 只是一个空的黑色图像。我不确定问题出在创建的 BitmapSource 或 PNGEncoder 问题上。这是我用来获取相同内容的代码。

0 投票
1 回答
2954 浏览

c# - 使用 BmpBitmapEncoder 黑色图像保存 Windows.Media.Drawing - 如何删除 alpha?

我正在使用 SVG# ( http://sharpvectors.codeplex.com/ ) 将 SVG 文件批量转换为其他格式。被转换的 SVG 图像是没有背景的黑色线条图。我对 WPF 或 System.Windows.Media 命名空间几乎没有经验,所以如果这是一个基本问题,请原谅。

我正在使用来自 SVG# 的 ImageSvgConverter 的修改版本,它接受一个 System.Windows.Media.Drawing对象,然后使用System.Windows.Media编码器(BmpBitmapEncoderPngBitmapEncoder)将其转换为所需的文件格式。

当我使用 a 导出时TiffBitmapEncoderorPngBitmapEncoder 或者GifBitmap图像按预期生成。生成的图像都有透明背景。

但是,当我使用JpegBitmapEncoderor导出时BmpBitmapEncoder,所有图像都变黑了。由于 tif、png 和 gif 都具有透明背景,我认为 jpg / bmp 图像被正确绘制,但是,由于这些文件格式不支持 alpha,因此具有黑色输出是有意义的,因为透明度会被解释什么都没有/黑色。

我认为这与这些 SO 帖子中所述来自 BitmapSource 的奇怪 bmp 黑色输出 - 有什么想法吗?将透明PNG转换为具有非黑色背景颜色的JPG,并且在保存位图时背景变为黑色-C#

但是,我看不到将这些帖子应用于我的问题的方法。谁能指出我正确的方向?

我尝试将白色 SolidColorBrush 应用于 DrawingContext 的 PushOpacityMask 方法,但是,这没有区别。

非常感谢任何指示。

0 投票
1 回答
2632 浏览

wpf - 使用 RenderTargetBitmap 的 WPF 内存泄漏?

我对我的 WPF 代码中的内存泄漏感到有点困惑。我将一些 3D 几何图形渲染到几个 RenderTargetBitmap,然后将每个渲染到一个大型的主 RenderTargetBitmap。但是当我这样做时,我得到一个内存泄漏,使我的应用程序在一两分钟后崩溃。

我在以下简化的代码中重现了该错误。

任何人都可以在这里看到任何明显的问题吗?为什么这段代码会有严重的内存泄漏?

0 投票
2 回答
2025 浏览

wpf - WPF RenderTargetBitmap 缺少元素

我有一个在数据模板中显示的带有小图标的 TreeView。我正在尝试使用 RenderTargetBitmap 将 Treeview 保存为 PNG。

图像在小型数据集上正确保存。但是,如果数据集变得太大,则某些图标会从最终图像中排除。神奇的数字似乎是 200 项。树是深还是宽似乎并不重要,在 200 个项目之后,图标不会被渲染。

添加代码

所以这是我用来创建图像的代码。

添加屏幕截图

请注意树右侧缺少的图标。 缺少图标的屏幕截图

现在,如果我折叠一些分支,从而隐藏了一些其他图标,那么这些图标就会被包括在内。这几乎就像 RenderTargetBitmap.Render 没有能力渲染所有的图标。或者它可能与虚拟面板有关。 包含图标的屏幕截图

这里是仔细看看。 在此处输入图像描述