问题标签 [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.
wpf - Web 服务器上 Viewport3D 的 wpf RenderTargetBitmap(屏幕外)
我正在屏幕外创建一个 Viewport3D (CurViewport3D) 并仅用一个平面填充它(用于测试目的)。
通过 RenderTargetBitmap 和 BitmapEncoder 创建此视口内容(作为 jpg)的 MemoryStream。整个功能都放在一个库 (dll) 中,因为我想在 Web 服务器上使用这个库来创建一个要在网站上显示的图像。
下面的代码被简化为基础,但它正在工作。
这是网站的代码:
以及背后的代码:
很简单!
现在的问题是:本地一切正常。图像显示在浏览器中 - 完美。一旦我尝试在 Web 服务器(Microsoft Server 2008)上运行它,浏览器中显示的图像是空的,没有内容。没有错误。
有谁知道如何让它在网络服务器上运行?
wpf - 多线程图像合成
我正在使用 WPF 成像来使用 DrawingVisual 将文本、3d 图形和图像合成在一起。然后将结果呈现为 RenderTargetBitmap 并以 jpeg 格式保存到磁盘。所有这些都发生在没有可视窗口的代码中。
只要我一次只尝试做一件事,它就可以很好地工作。但是,我想看看是否可以通过使用多个线程进行渲染来加快速度。每个线程都使用一个创建自己的 DrawingContext、DrawingVisual 等的对象。但是,当我尝试并行访问它们时,显然在某处存在一些共享状态,因为我得到了虚假错误。有时它是“调用线程无法访问此对象,因为另一个线程创建了它”。其他时候,当我添加指向 3D 几何图形时,从 WPF 的内部冒出的 NullReferenceExceptions 看起来更邪恶。
有没有办法确保每个线程与 WPF 保持隔离?还是共享状态是不可避免的?
c# - DrawingContext 到位图文件
我有一个 DrawingContext(Visual 或 DrawingGroup 的一部分),我在其中绘制一堆矩形和/或 1 位图像。把它想象成一个掩蔽的 1 位图像。我想将其转换为位图图像文件。
使用RenderTargetBitmap
不是一个选项,因为它只能以 32 位像素格式渲染,所以如果我必须渲染一个 20MB 的 1 位图像,我最终会在我的堆上获得 640MB (20*32) 的内存。这当然会产生巨大的 LOH 碎片,并且应用程序在第二次拍摄时内存不足。
所以,我基本上需要一种有效地从绘图上下文写入 1 位位图文件的方法。任何想法/建议/替代方法将不胜感激。
c# - 如何让 RenderTargetBitmap 和 VisualBrush 一起玩得很好?
我的要求:
- 处理自定义图像逻辑的持久性
UserControl
,例如地图或绘图 - 一组容器,用于在缩放或平移移动期间对图像进行缓存
VisualBrush
UserControl
我可以添加到容器中以与效果一起使用的副本
我目前使用 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 呈现)根本不会显示,直到您再次点击“新建”按钮,将图像推送到缓存,并且仍然没有向您显示新创建的图像。
wpf - 将 WPF 画布呈现为特定大小的位图
我有一个想要制作位图的 WPF 画布。
具体来说,我想在 300dpi 位图上渲染它的实际大小。画布上对象的“实际大小”在现实生活中是 10 个设备独立像素= 1"。理论上,WPF 设备独立像素为 96dpi。
我花了几天的时间试图让它发挥作用,但我感到困惑。
我的理解是,一般程序大致是:
并且我需要将画布的 LayoutTransform 设置为 ScaleTransform 吗?SomeOtherFactor?然后对画布进行测量和排列到?SomeDesiredSize?
我坚持的是什么用于?SomeFactor?,?SomeOtherFactor?和?SomeDesiredSize?使这项工作。 MSDN 文档没有说明要使用哪些因素。
c# - 将 RenderTargetBitmap 转换为 BitmapImage
我有一个RenderTargetBitmap
,我需要将其转换为BitmapImage
. 请检查下面的代码。
在上面的代码中,我使用了 Image。现在我需要使用 BitmapImage。我怎样才能做到这一点?
wpf - 使用 RenderTargetBitmap 的 WPF 画布区域的快照
我想在我的应用程序中创建画布区域的快照。我正在使用视觉画笔来获取快照并使用 PngEncoder 保存它。但生成的 PNG 只是一个空的黑色图像。我不确定问题出在创建的 BitmapSource 或 PNGEncoder 问题上。这是我用来获取相同内容的代码。
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
编码器(BmpBitmapEncoder
等PngBitmapEncoder
)将其转换为所需的文件格式。
当我使用 a 导出时TiffBitmapEncoderor
,PngBitmapEncoder
或者GifBitmap
图像按预期生成。生成的图像都有透明背景。
但是,当我使用JpegBitmapEncoder
or导出时BmpBitmapEncoder
,所有图像都变黑了。由于 tif、png 和 gif 都具有透明背景,我认为 jpg / bmp 图像被正确绘制,但是,由于这些文件格式不支持 alpha,因此具有黑色输出是有意义的,因为透明度会被解释什么都没有/黑色。
我认为这与这些 SO 帖子中所述来自 BitmapSource 的奇怪 bmp 黑色输出 - 有什么想法吗?,将透明PNG转换为具有非黑色背景颜色的JPG,并且在保存位图时背景变为黑色-C#。
但是,我看不到将这些帖子应用于我的问题的方法。谁能指出我正确的方向?
我尝试将白色 SolidColorBrush 应用于 DrawingContext 的 PushOpacityMask 方法,但是,这没有区别。
非常感谢任何指示。
wpf - 使用 RenderTargetBitmap 的 WPF 内存泄漏?
我对我的 WPF 代码中的内存泄漏感到有点困惑。我将一些 3D 几何图形渲染到几个 RenderTargetBitmap,然后将每个渲染到一个大型的主 RenderTargetBitmap。但是当我这样做时,我得到一个内存泄漏,使我的应用程序在一两分钟后崩溃。
我在以下简化的代码中重现了该错误。
任何人都可以在这里看到任何明显的问题吗?为什么这段代码会有严重的内存泄漏?