У меня есть какое-то растровое изображение A, которое я изменяю для создания растрового изображения B. Я хочу эффективно создать растровое изображение D, XOR объединяя значения пикселей A и B вместе, так что D XOR A создает растровое изображение B, а D XOR B создает растровое изображение A. Я хочу сохранить различия между растровыми изображениями, чтобы отменить сделанные мной изменения.
Пока я пробовал:
Рисование A на B с помощью объекта рисования, который я назвал .setXfermode (новый PorterDuffXfermode (PorterDuff.Mode.XOR)). Это работает, когда альфа А и В везде 255, но все, что ниже, приводит к нежелательным результатам. Если бы я, например, XOR A на A, я ожидал бы, что результатом будет пустое изображение. В этом режиме xfer большая часть A исчезнет, но части без полной альфы останутся.
Рисование A на B с помощью объекта рисования, который я назвал .setXfermode (new PixelXorXfermode (0)). Этот режим xfer уничтожает альфа-значения, а это не то, что мне нужно. Я также не уверен, какие полезные вещи я могу установить значение конструктора.
Что я могу сделать? Мне нужно что-то, что будет обрабатывать значения пикселей как простые значения, а не обрабатывать значения альфа как особый случай. Мне нужно, чтобы это было достаточно быстро (как в приведенных выше типах рисования), и использование чего-то вроде setpixel / getpixel или выполнение вычислений в байте [] будет слишком медленным.
Редактировать: Кто-нибудь может помочь с этим? Даже знание того, что большинство людей не верят, что есть вызов API, который сделает это для меня, поможет. Я почти в отчаянии, чтобы переключиться на рендеринг OpenGL, так как у него есть режим рендеринга XOR (который, я надеюсь, не имеет такой же проблемы выше).