我需要对图像执行多个操作,例如,我需要调整图像大小,可能会将其填充以保持纵横比(并绘制背景颜色),并有条件地标记水印。
我目前正在使用BitmapFrame
作为我在相关方法之间传递的类型。
有人可以推荐另一种我应该用来对图像进行增量更新的类型吗?
我可能会创建各种图像的组合,虽然我不确定我应该使用哪种类型的图像?
答案 0 :(得分:9)
WriteableBitmap
是合适的。 BitmapFrame
和WriteableBitmap
都来自BitmapSource
,WriteableBitmap
可以使用任何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方法释放后缓冲区并允许显示到屏幕。
当更新发送到渲染线程时,渲染线程将更改的矩形从后缓冲区复制到前缓冲区。渲染系统控制此交换以避免死锁和重绘工件,例如“撕裂”。