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

标签 java android mobile

我有一些位图 A,我对其进行修改以生成位图 B。我想通过将 A 和 B 的像素值异或在一起来高效生成位图 D,这样 D XOR A 生成位图 B,D XOR B 生成位图 A。我想存储位图之间的差异,以便我可以撤销所做的更改。

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

  1. 使用我称之为 .setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XOR)) 的绘制对象将 A 绘制到 B 上。这适用于 A 和 B 的 alpha 到处都是 255 但低于任何值都会产生不良结果的情况。例如,如果我将 A 异或到 A,我希望结果是空白图像。使用这种 xfer 模式,A 的大部分将消失,但没有完整 alpha 的部分将保留。

  2. 使用我已调用 .setXfermode(new PixelXorXfermode(0)) 的绘制对象将 A 绘制到 B 上。这种 xfer 模式破坏了 alpha 值,这不是我想要的。我也不确定我可以将构造函数值设置为哪些有用的东西。

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

编辑:有人可以帮忙吗?即使知道大多数人不相信有一个 API 调用可以为我做这件事也会有所帮助。我几乎迫不及待地想切换到 OpenGL 渲染,因为它具有 XOR 渲染模式(我希望它不会出现上述相同的问题)。

最佳答案

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

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

关于java - 如何将两个位图的像素值异或在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4040354/

相关文章:

android - 让服务接收 SMS 消息

javascript - 通过 HTML 为移动应用程序提供高性能 JavaScript 图表 API

java - Twitter API - 无法更新包含圆括号的状态

java - 按配置文件使用 yaml 属性进行 Spring Boot 测试

java - 无法解析encodetoString

java - 如何一次加载多个 Admob 广告并将其显示在队列中

java - 在 swagger 输出中添加换行符

Android - 顶部透明的选项菜单

jquery - 使用 jQuery Mobile 更改背景颜色

android - 我可以使用 PhoneGap 或其他 API 将视频上传到我的服务器吗?