要在 WPF 和 Windows 应用商店应用程序中编辑图像的颜色,我知道我们可以读取图像的像素,编辑它们并将它们写入新的 BitmapSource 或 WriteableBitmap。我怀疑这种技术总是最好的。我们还有哪些其他选项来编辑图像的颜色,比如改变亮度或伽玛?
问问题
280 次
1 回答
1
您可以访问底层位图缓冲区,从而有效地操作像素。在 WPF 中,您可以使用WriteableBitmap
该类:
为了更好地控制更新以及对后台缓冲区的多线程访问,请使用以下工作流程。
调用 Lock 方法为更新保留后台缓冲区。
通过访问 BackBuffer 属性获取指向后台缓冲区的指针。
将更改写入后台缓冲区。当 WriteableBitmap 被锁定时,其他线程可能会将更改写入后台缓冲区。
调用 AddDirtyRect 方法以指示已更改的区域。
调用 Unlock 方法以释放后台缓冲区并允许呈现到屏幕上。
当更新发送到渲染线程时,渲染线程将更改的矩形从后缓冲区复制到前缓冲区。渲染系统控制这种交换以避免死锁和重绘工件,例如“撕裂”。
在 Windows 应用商店应用中,您可以使用WriteableBitmap
该类:
PixelBuffer不能直接写入,但是,您可以使用特定于语言的技术来访问缓冲区并更改其内容。
要从 C# 或 Microsoft Visual Basic 访问像素内容,可以使用AsStream扩展方法将底层缓冲区作为流进行访问。
要从 C++ 访问像素内容,您可以查询IBufferByteAccess类型(在 Robuffer.h 中定义)并直接访问其Buffer属性。
于 2013-01-14T10:00:00.560 回答