我需要对图像执行多项操作,例如,我需要调整图像大小,可能需要填充它以保持纵横比(并绘制背景颜色),并有条件地加盖水印。
我目前BitmapFrame
用作在所涉及的方法之间传递的类型。
谁能推荐另一种我应该用来对图像执行增量更新的类型?
我可以创建各种图像的组合,尽管我不确定我应该使用哪种类型?
我需要对图像执行多项操作,例如,我需要调整图像大小,可能需要填充它以保持纵横比(并绘制背景颜色),并有条件地加盖水印。
我目前BitmapFrame
用作在所涉及的方法之间传递的类型。
谁能推荐另一种我应该用来对图像执行增量更新的类型?
我可以创建各种图像的组合,尽管我不确定我应该使用哪种类型?
WriteableBitmap
当您想要对图像进行增量更新时,它是合适的。两者都BitmapFrame
继承WriteableBitmap
自BitmapSource
,并且WriteableBitmap
可以使用 any 实例化BitmapSource
。
您可能还想看看WriteableBitmapEx库,它为位图操作提供了大量有效的WriteableBitmap
扩展方法。该库适用于 WPF 应用程序以及 Silverlight、WP7 和 Metro。
尝试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 方法释放后台缓冲区并允许呈现到屏幕上。
当更新发送到渲染线程时,渲染线程将更改的矩形从后缓冲区复制到前缓冲区。渲染系统控制这种交换以避免死锁和重绘工件,例如“撕裂”。