问题标签 [bitmapsource]

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 投票
2 回答
3254 浏览

wpf - BitmapSource 是唯一可以在 Image Source 中使用的类型吗?

我们可以使用 Bitmapsource 对象作为 Image 控件的内容,但是如果我只有 Bitmap 对象,是否可以直接使用它,如果我使用以下方法将 Bitmap 转换为 Bitmapsouce:

这需要一些时间。有没有办法直接使用Bitmap?

而且我发现BitmapSource好像不能直接释放,有没有示例方法可以立即释放内存,Bitmapsouce不再使用后。

0 投票
2 回答
5739 浏览

wpf - 在 WPF 中使用 BitmapSource 作为图像源

我试图通过在每次事件确定源需要更新时更改源图像来更新 XAML 中的图像(下面的_browserScreenshot)对象。现在我有这个:

然后我有一个事件处理程序,如图所示:

现在,每当此事件触发时,都会拍摄新的屏幕截图,并且应该更新 Image 的源(此处称为 _browserScreenshot)控件。我不断收到有关更改 IsFrozen 属性的错误,但我无法弄清楚如何正确更改它并按照我想要的方式进行工作。提前谢谢大家。

0 投票
1 回答
2033 浏览

wpf - 无法从 TiffBitmapDecoder.Frames 检索 TIFF 页面——所有帧都是第 1 页

我正在尝试将多页 tiff 图像转换为多页 XPS 文档。我遇到的问题是 TiffBitmapDecoder 及其 BitmapFrames。

这是代码:

这会产生具有正确页数的 XPS。但是,每一页都是 tiff 第一页的副本。事实上,如果我选择一个帧(比如 dec.Frames[4])并将其写入磁盘,它看起来就像是第一页。

我到底做错了什么?框架实际上不是图像的各个页面吗?我怎样才能让他们出去和他们一起工作???

0 投票
1 回答
1716 浏览

wpf - 绘制 BitmapSource 的子区域

我正在 WPF 中为基于 2D 瓦片的游戏创建关卡编辑器。我正在尝试找出加载瓦片集Image文件并将每个瓦片渲染到适当位置以重建地图的最佳方法。

目前,我正在加载Imageas a BitmapSource,并且我从Canvas显示地图的控件的类派生。我正在重写该OnRender方法,以便获得一个DrawingContext. 但是,DrawingContext.DrawImage似乎没有适当的重载来仅绘制图像的子矩形;看起来我必须绘制整个图像。

如果我想将 a 的子矩形绘制Image到 a 上,我应该使用什么Canvas?还是我应该使用 a 以外的东西Canvas

0 投票
1 回答
11845 浏览

wpf - 你如何确保 WPF 从内存中释放大的 BitmapSource?

系统:Windows XP SP3、.NET 3.5、4GB RAM、双 1.6GHz

我有一个 WPF 应用程序,它加载和转换(使用情节提要动画)非常大的 PNG。这些 PNG 的分辨率为 8190x1080。当应用程序运行时,它似乎会缓存图像,并且系统内存会慢慢增加。最终它阻塞了系统并抛出 OutOfMemoryException。

以下是我目前尝试解决此问题的步骤:

1)我正在从应用程序中删除 BitmapSource 对象

2)我在加载 BitmapSource 时将 BitmapSource BitmapCacheOption 设置为 None

3)一旦加载,我将冻结 BitmapSource。

4)我正在删除对使用源的图像的所有引用以及对源本身的任何引用。

5) 完成上述步骤后手动调用 GC.Collect()。

希望弄清楚为什么 WPF 会为这些图像挂在内存上,以及一个可能的解决方案,以确保正确恢复用于加载它们的内存。

0 投票
3 回答
9165 浏览

c# - 使用 C# 的图像加载内存泄漏

我的应用程序中存在内存泄漏问题,它会加载大量图像。我对 C# 相当陌生,并认为我的内存泄漏问题已经过去。我无法找出问题所在 - 也许我正在使用一些我没有正确处理的非托管模块?

为了说明我的问题,我简化了导致问题的核心并将其转移到一个干净的项目中。请注意,这都是愚蠢的代码,并没有反映它来自的原始应用程序。在测试应用程序中,我有 2 个按钮,触发了两个事件。

按钮 1 - 创建:将对象设置为数据上下文。这将加载图像并通过将对象设置为 DataContext 来使它们保持活动状态:

按钮 2 - 清理:我的理解是,如果我放开持有 SillyImageLoader 的引用,该引用再次持有图像,那么它将被删除。我还显式地触发垃圾收集,只是为了在删除引用后立即查看内存量。

测试时,我正在加载 974KB 的 jpeg 图像。保存 30 个位图表示可以将我的应用程序的内存使用量从 ~18MB 提高到 ~562MB。行。但是当我点击清理时,内存只下降到~292MB。如果我重复 Create+CleanUp,我将剩下大约 250MB 的内存。所以很明显,某些东西仍然被某人持有。

这是 SillyImageLoader 代码:

有任何想法吗?问题似乎出在 BitmapSource 上。仅保留位图没有内存泄漏。我使用 BitmapSource 能够将其设置为图像的 Source 属性。我应该这样做吗?如果是这样 - 我仍然想知道内存泄漏的答案。

谢谢。

0 投票
1 回答
1620 浏览

c# - WPF 图像不会显示 BitmapSource

我是使用 WPF 和 GDI 的新手,但无法显示图像。我的最终目标是构建类似暴露的东西。到目前为止,我将屏幕变灰,收集所有活动的 HWND,并捕获所有窗口的屏幕。现在,我有一个 Image 元素,我尝试为其设置源,但没有任何显示。

完整代码在这里:
http ://pastebin.com/m70af590 - 代码
http://pastebin.com/m38966750 - xaml

我知道我现在拥有它的方式对于我正在尝试做的事情没有多大意义(运行循环并一遍又一遍地写入同一个图像),但我希望在那个图像上有一些东西结束。

我已经尝试对可见窗口的 HWND 进行硬编码,但它仍然无法正常工作。

谢谢你的帮助!

0 投票
1 回答
1502 浏览

c# - 从 BitmapSource 中删除 alpha

我使用 BitBlt() 和 CreateBitmapSourceFromHBitmap() 将窗口捕获为 BitmapSource,我可以在 WPF 应用程序的 Image 元素上显示该窗口。但由于某种原因,它捕获的大多数应用程序都是透明的。这是正在发生的事情的源与捕获图像:

https://userpages.umbc.edu/~smyth1/images/screencap.PNG
(来源:umbc.edu

它是灰色的,因为它所在窗口的背景是灰色的。无论我给窗口提供什么背景,都会显示出来。

如何让捕获的图像更准确地反映原始图像?

0 投票
1 回答
8950 浏览

c# - 为什么 BitmapSource.Create 会抛出 ArgumentException?

我正在尝试通过使用 Image 和 BitmapSource 来获取从原始数据创建的位图以在 WPF 中显示:

但是,对 BitmapSource.Create 的调用会引发 ArgumentException,说“值不在预期范围内”。这不是这样做的方法吗?我没有正确拨打电话吗?

0 投票
1 回答
106 浏览

wpf - WPF - Generate BitmapSource from Over state of a button

I can generate a BitmapSource from a button fine, however it always is just the image of the normal state of the button.

I want to be able to generate a BitmapSource of the over state of a button.

I tried calling VisualStateManager.GoToState((FrameworkElement)target, "MouseOver", true); before calling my code to generate the BitmapSource. It correctly changes the button to the overstate on the GUI, but the BitmapSource is still that of the button in the normal state.