【问题标题】:What WPF image type should I use to perform multiple transformations我应该使用什么 WPF 图像类型来执行多个转换
【发布时间】:2012-06-14 00:28:25
【问题描述】:

我需要对图像执行多项操作,例如,我需要调整图像大小,可能需要填充它以保持纵横比(并绘制背景颜色),并有条件地加盖水印。

我目前使用BitmapFrame 作为我在所涉及的方法之间传递的类型。

谁能推荐另一种我应该用来对图像执行增量更新的类型?

我可以创建各种图像的合成,虽然我不确定我应该使用哪种类型?

【问题讨论】:

  • 您只需要显示结果,还是还需要对其执行其他操作(例如保存、发送等)。

标签: c# wpf image-processing


【解决方案1】:

试试WriteableBitmap

http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.writeablebitmap.aspx

使用 WriteableBitmap 类以每帧为基础更新和呈现位图。这对于生成算法内容(例如分形图像)和数据可视化(例如音乐可视化器)很有用。

为了更好地控制更新以及对后台缓冲区的多线程访问,请使用以下工作流程。

1。 调用 Lock 方法为更新保留后台缓冲区。

2。 通过访问 BackBuffer 属性获取指向后台缓冲区的指针。

3。 将更改写入后台缓冲区。当 WriteableBitmap 被锁定时,其他线程可能会将更改写入后台缓冲区。

4。 调用 AddDirtyRect 方法以指示已更改的区域。

5。 调用 Unlock 方法以释放后台缓冲区并允许呈现到屏幕上。

当更新被发送到渲染线程时,渲染线程将更改的矩形从后台缓冲区复制到前台缓冲区。渲染系统控制这种交换以避免死锁和重绘工件,例如“撕裂”。

【讨论】:

    【解决方案2】:

    WriteableBitmap 适用于您想要对映像进行增量更新时。 BitmapFrameWriteableBitmap 都继承自 BitmapSourceWriteableBitmap 可以使用任何 BitmapSource 进行实例化。

    您可能还想看看WriteableBitmapEx 库,它为位图操作提供了大量高效的WriteableBitmap 扩展方法。该库适用于 WPF 应用程序以及 Silverlight、WP7 和 Metro。

    【讨论】:

      猜你喜欢
      • 2010-12-23
      • 2011-01-12
      • 2015-03-09
      • 1970-01-01
      • 2013-01-14
      • 2019-12-09
      • 1970-01-01
      • 2012-06-12
      • 2021-08-25
      相关资源
      最近更新 更多