问题标签 [writeablebitmap]

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 投票
1 回答
764 浏览

.net - WriteableBitmap 不可用?

我发现什么可能是对缓冲绘图问题的完美答案,但由于某种原因,我的 VS2008 版本似乎没有WriteableBitmap?我已经尝试根据文档包含相关的命名空间:

但这只会给我错误:

我是否安装了旧版本的 .net 或其他东西?有什么方法可以告诉 Visual Studio 使用的是什么版本?我已将 VS 更新为 service pack 1,这没有任何区别。

0 投票
3 回答
13488 浏览

silverlight - 使用 FJCore 对 Silverlight WriteableBitmap 进行编码

我试图找出如何使用 FJCore 将 WriteableBitmap 编码为 jpeg。我知道 WriteableBitmap 提供了原始像素,但我不确定如何将其转换为 FJCore 对其 JpegEncoder 方法所期望的格式。JpegEncoder 有两个重载,一个采用 FluxJpeg.Core.Image,另一个采用 DecodedJpeg。

我试图创建一个 FluxJpeg.Core.Image 但它需要一个 byte[][,] 用于图像数据。byte[n][x,y] 其中 x 是宽度,y 是高度,但我不知道 n 应该是什么。

我认为 n 应该是 4,因为这将对应于每个像素中编码的 argb 信息,但是当我尝试 FJCore 抛出一个参数超出范围异常时。这是我尝试过的。Raster 是我的 byte[4][x,y] 数组。

0 投票
3 回答
5275 浏览

wpf - WPF WriteableBitmap 内存泄漏?

我试图弄清楚如何释放 WriteableBitmap 内存。

在下一段代码中,我用来自“BigImage”(3600 * 4800 px,仅用于测试)的大量数据填充 WriteableBitmap 的后缓冲区如果我注释位图和图像等于 null 的行,则内存它没有发布,应用程序消耗约 230 MB,即使不再使用图像和位图!

正如您在代码末尾看到的那样,必须调用 GC.Collect() 来释放内存。

所以问题是,释放 WriteableBitmap 对象使用的内存的正确方法是什么?GC.Collect() 是唯一的方法吗?

任何帮助都会很棒。

PS。对不起,我的英语不好。

0 投票
1 回答
8576 浏览

memory - 如何处理可写位图?(WPF)

前段时间我发布了一个与 WriteableBitmap 内存泄漏相关的问题,虽然我收到了与该问题相关的精彩提示,但我仍然认为存在严重的错误/(我犯的错误)/(混淆)/(其他一些事情)这里。

所以,这又是我的问题:

假设我们有一个带有图像和按钮的 WPF 应用程序。图像的源是一个非常大的位图(3600 * 4800 像素),当它在运行时显示时,应用程序消耗约 90 MB。

现在假设我希望从图像源(真正的大图像)实例化一个 WriteableBitmap,当这种情况发生时,应用程序会消耗大约 220 MB。

现在到了棘手的部分,当对图像的修改(通过 WriteableBitmap)结束时,对 WriteableBitmap 的所有引用(至少我知道的那些)都被销毁(在方法结束时或通过设置它们为 null)应该释放 writeableBitmap 使用的内存,并且应用程序消耗应该返回到 ~90 MB。问题是有时它会返回,有时它不会。

这是一个示例代码:

如您所见,引用是本地的,应该在方法结束时释放内存(或者当垃圾收集器决定这样做时)。但是,该应用程序可能会消耗约 224 MB,直到宇宙尽头。

任何帮助都会很棒。

0 投票
1 回答
2089 浏览

wpf - WPF WriteableBitmap 和效果

我试图研究使用 WPF WriteableBitmap 类来允许我的应用程序将不透明蒙版应用于图像。

基本上我有一个蓝色矩形作为图像,另一个 100% 透明的绿色矩形图像在蓝色的顶部。

当用户将鼠标移到绿色(透明)图像上时,我想应用不透明蒙版(可能使用简单的椭圆),使其看起来像正在发生绿色光晕。

我故意不这样做是 XAML 和标准 WPF 效果,因为我真的需要它具有超级性能,我最终会用更高级的 blob 替换椭圆......

有什么想法吗??

谢谢!

0 投票
1 回答
708 浏览

wpf - 在 WPF 中创建高性能动画

我处于需要应用许多具有透明度等效果的动画的情况,但是当大约有 10 个动画在运行时,我的应用程序会减速到停止!:(

我还尝试使用 CompositionTarget.Rendering 事件使用逐帧手动动画来实现类似粒子的效果,该事件以给定的帧速率更改了 Image 的 Source 属性。同样,这对于屏幕上的前几个粒子实例来说效果很好,但是当越来越多的粒子被添加时,我需要它来保持性能,这对于任何应用程序来说都是一个艰难的要求

我想知道是否有人在WPF中使用像素着色器进行动画,或者自定义可写位图用于动画?

如果可能的话,我基本上需要将大部分动画处理交给 GPU...

谢谢你提供的所有帮助!

干杯,马克

0 投票
2 回答
1211 浏览

silverlight - Silverlight3 中的 PixelFormats 和 WriteableBitmap.Lock 去了哪里?

几个月前,我构建了一些在线示例,例如Jeff Prosise 的这个示例,它们使用 Silverlight 中的 WriteableBitmap 类。

今天使用最新的 Silverlight3 安装程序 (3.0.40624.0) 重新访问它们,API 似乎发生了变化。

我想出了一些变化。例如,WriteableBitmap 数组访问器已经消失,但我在新的 Pixels 属性中找到了它,所以不要写:

我可以写

这些调用是否有类似的简单替换,或者使用模式本身是否发生了变化?

谁能指出我使用更新的 API 的工作示例?

0 投票
2 回答
4173 浏览

c# - WriteableBitmap 上的异步操作

我正在用 WPF (C#) 编写一个应用程序,它对位图集合执行长时间操作。为了让我的应用程序保持响应,我决定使用另一个线程对位图执行操作,并在主 UI 线程的进度条上报告进度。我以为 BackgroundWorker 会为我做任何事情,但看起来不会那么容易。

我有以下代码:

在运行时,我使用标准打开文件对话框将图像加载到 Pictures 集合中,然后调用 DoLotsOfOperations() 方法。但是,一旦我尝试访问单个位图的任何属性,我就会得到 InvalidOperationException:“调用线程无法访问该对象,因为不同的线程拥有它”。

这显然是真的 - 我在 UI 线程中加载了位图并填充了集合,然后我尝试在另一个线程中读取集合元素。所以我尝试了不同的方法:

  • 我将整个集合作为 RunWorkerAsync 方法的参数传递,并从 e.Argument 将其返回到 DoWork 方法中,但是当我尝试读取单个位图的属性时,我仍然遇到相同的异常。
  • 我尝试了同样的事情,这次将单个位图作为 backgroundworker 的参数传递,但我仍然无法获得任何位图的属性,更不用说位图的像素了。

那么如何在另一个线程中访问位图数据(最好使用 BackgroundWorker)?

我不知道,也许我的整个方法都是错误的。我想要实现的总体思路是:

  1. 用户加载位图,然后将其显示在窗口中。
  2. 用户单击按钮并在位图上执行长时间操作,但 UI 是响应式的(例如允许用户取消操作),并且进度条会在进度条上报告。

提前感谢您的帮助。

0 投票
2 回答
257 浏览

silverlight - 像素值变成负数

我想将 Silverlight 中的可写图像保存到磁盘。

我找到了本教程:http : //kodierer.blogspot.com/2009/11/convert-encode-and-decode-silverlight.html,并且我的代码基于 EncodeJpeg 方法。

但在:

它引发异常:算术运算导致溢出。仔细检查后,颜色值为 -16,777,216。像素为黑色,本应为 0。切换到白色像素时,该值为 -1。

我尝试添加 16,777,216 以查看是否存在某种偏移,但这仅适用于黑色像素,它会在白色像素上崩溃。

0 投票
1 回答
473 浏览

silverlight - UIElement 到 PNG - 文本略微模糊

我正在使用 ImageTool 的 PNG 编码器来创建图像。

我有一个Grid包含多个TextBlocks,每个都TextBlock包含动态文本。

WriteableBitmap当我从包含 s 的网格创建一个时TextBlock,然后我使用 ImageTool 的编码器将其转换WriteableBitmap为 PNG 图像。

一切正常,但是,当我查看 PNG 图像时(我将文件保存到硬盘驱动器以进行测试) - 文本看起来有点模糊。这是编码器或WriteableBitmap类的问题吗?并且 - 以前有没有人经历过这种情况并且有解决方法吗?

谢谢。