Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于WPF和Windows应用商店应用程序中的图像颜色编辑,除了编辑像素外,我们还有哪些选项?_Wpf_Windows Store Apps - Fatal编程技术网

对于WPF和Windows应用商店应用程序中的图像颜色编辑,除了编辑像素外,我们还有哪些选项?

对于WPF和Windows应用商店应用程序中的图像颜色编辑,除了编辑像素外,我们还有哪些选项?,wpf,windows-store-apps,Wpf,Windows Store Apps,要在WPF和Windows应用商店应用程序中编辑图像的颜色,我知道我们可以读取图像的像素,编辑它们并将它们写入新的位图源或可写位图。我怀疑这种技术是否总是最好的。我们还需要哪些其他选项来编辑图像的颜色,比如更改亮度或gamma?您可以访问底层位图缓冲区,该缓冲区允许您高效地操作像素。在WPF中,您可以使用以下类: 要更好地控制更新,并对后台缓冲区进行多线程访问,请使用以下工作流 调用Lock方法为更新保留后台缓冲区 通过访问BackBuffer属性获取指向后台缓冲区的指针 将更改写入后台缓冲区。

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

您可以访问底层位图缓冲区,该缓冲区允许您高效地操作像素。在WPF中,您可以使用以下类:

要更好地控制更新,并对后台缓冲区进行多线程访问,请使用以下工作流

  • 调用Lock方法为更新保留后台缓冲区

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

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

  • 调用AddDirtyRect方法以指示已更改的区域

  • 调用Unlock方法释放后缓冲区并允许在屏幕上显示

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

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

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

    • 要从C#或Microsoft Visual Basic访问像素内容,可以使用AsStream扩展方法以流的形式访问底层缓冲区

    • >P>从C++中访问像素内容,可以查询<强> iBuffer-ByTeAccess <强>类型(在RoSpult.h中定义),并直接访问其<强>缓冲区Real.


    如果您不想编辑像素,您想更改什么?基于像素的图像中的所有信息都包含在像素中。@DanielHilgarth:一次读取、修改和回写一个像素的像素与对图像的基础位图缓冲区进行直接数学运算相比,执行效果可能会很差。@MartinLiversage:同意。但那仍然在编辑像素…@DanielHilgarth:我当然想编辑像素。问题更多的是如何做到这一点。在GDI中,我们可以使用ColorMatrix。我听说也可以使用像素着色器效果。我只是想知道,对于某些类型的图像编辑,编辑读取像素并将其写回是否是一个好的解决方案。但我似乎可以直接更改可写位图的缓冲区(还没有尝试)。@JürgenBayer:那么你的问题是:“如何以性能方式对图像应用任意转换?”谢谢。我的问题中已经提到了WriteableBitmap。Windows应用商店应用也允许使用位图解码器读取像素。对不起,我误解了。我想你的意思是直接访问缓冲区和改变像素。