0

要在 WPF 和 Windows 应用商店应用程序中编辑图像的颜色,我知道我们可以读取图像的像素,编辑它们并将它们写入新的 BitmapSource 或 WriteableBitmap。我怀疑这种技术总是最好的。我们还有哪些其他选项来编辑图像的颜色,比如改变亮度或伽玛?

4

1 回答 1

1

您可以访问底层位图缓冲区,从而有效地操作像素。在 WPF 中,您可以使用WriteableBitmap该类:

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

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

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

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

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

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

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

在 Windows 应用商店应用中,您可以使用WriteableBitmap该类:

PixelBuffer不能直接写入,但是,您可以使用特定于语言的技术来访问缓冲区并更改其内容。

  • 要从 C# 或 Microsoft Visual Basic 访问像素内容,可以使用AsStream扩展方法将底层缓冲区作为流进行访问。

  • 要从 C++ 访问像素内容,您可以查询IBufferByteAccess类型(在 Robuffer.h 中定义)并直接访问其Buffer属性。

于 2013-01-14T10:00:00.560 回答