首页 文章

如何将两个位图的像素值一起异或?

提问于
浏览
4

我有一些位图A,我修改生成位图B.我想通过异或一起对A和B的像素值进行异或来生成位图D,这样D XOR A产生位图B和D XOR B产生位图A.我想要存储位图之间的差异,以便我可以反转我所做的更改 .

到目前为止,我已经尝试过:

  • 使用我称为.setXfermode(新的PorterDuffXfermode(PorterDuff.Mode.XOR))的绘图对象将A绘制到B上 . 这适用于A和B的alpha在任何地方都是255但下面的任何内容都会产生不良结果 . 例如,如果我对A进行异或,我希望结果是空白图像 . 使用此xfer模式,大部分A将消失,但没有完整alpha的部分将保留 .

  • 使用我称为.setXfermode(new PixelXorXfermode(0))的绘图对象将A绘制到B上 . 这个xfer模式破坏了alpha值,这不是我想要的 . 我也不确定我可以将构造函数值设置为什么有用的东西 .

我能做什么?我需要一些将像素值视为普通值的东西,而不是将alpha值视为特殊情况 . 我需要这个相当快(就像上面的绘画类型一样)并且使用类似setpixel / getpixel的东西或者在byte []中自己进行计算将会太慢 .

编辑:任何人都可以帮忙吗?即使知道大多数人不相信有一个API调用会对我这样做也会有所帮助 . 我几乎绝望地切换到OpenGL渲染,因为它有一个XOR渲染模式(我希望上面没有相同的问题) .

2 回答

  • 0

    是否可以在绘制之前尝试对位图的字节数组进行异或运算?这将不会对alphas提供特殊处理,并且如果位图的大小相同,理论上可能会起作用 . 当然可能不会很快......

    或者也许您可以使用上述方法之一,但以某种方式操纵字节数组中的alpha值并单独处理它们?

  • 0

    作为替代方案,考虑将原始图像复制到缓冲区中 . 撤消您只需将保存的图像复制到更改的图像上即可 . 它不应该占用更多的内存并避免XOR问题 .

相关问题