我应该使用什么WPF图像类型来执行多个转换

时间:2012-06-11 04:00:19

标签: c# wpf image-processing

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

我目前正在使用BitmapFrame作为我在相关方法之间传递的类型。

有人可以推荐另一种我应该用来对图像进行增量更新的类型吗?

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

2 个答案:

答案 0 :(得分:9)

当您想要对图像进行增量更新时,

WriteableBitmap是合适的。 BitmapFrameWriteableBitmap都来自BitmapSourceWriteableBitmap可以使用任何BitmapSource进行实例化。

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

答案 1 :(得分:6)

尝试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方法释放后缓冲区并允许显示到屏幕。

     

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