Как XOR значения пикселей двух растровых изображений вместе? - PullRequest
4 голосов
/ 28 октября 2010

У меня есть какое-то растровое изображение A, которое я изменяю для создания растрового изображения B. Я хочу эффективно создать растровое изображение D, XOR объединяя значения пикселей A и B вместе, так что D XOR A создает растровое изображение B, а D XOR B создает растровое изображение A. Я хочу сохранить различия между растровыми изображениями, чтобы отменить сделанные мной изменения.

Пока я пробовал:

  1. Рисование A на B с помощью объекта рисования, который я назвал .setXfermode (новый PorterDuffXfermode (PorterDuff.Mode.XOR)). Это работает, когда альфа А и В везде 255, но все, что ниже, приводит к нежелательным результатам. Если бы я, например, XOR A на A, я ожидал бы, что результатом будет пустое изображение. В этом режиме xfer большая часть A исчезнет, ​​но части без полной альфы останутся.

  2. Рисование A на B с помощью объекта рисования, который я назвал .setXfermode (new PixelXorXfermode (0)). Этот режим xfer уничтожает альфа-значения, а это не то, что мне нужно. Я также не уверен, какие полезные вещи я могу установить значение конструктора.

Что я могу сделать? Мне нужно что-то, что будет обрабатывать значения пикселей как простые значения, а не обрабатывать значения альфа как особый случай. Мне нужно, чтобы это было достаточно быстро (как в приведенных выше типах рисования), и использование чего-то вроде setpixel / getpixel или выполнение вычислений в байте [] будет слишком медленным.

Редактировать: Кто-нибудь может помочь с этим? Даже знание того, что большинство людей не верят, что есть вызов API, который сделает это для меня, поможет. Я почти в отчаянии, чтобы переключиться на рендеринг OpenGL, так как у него есть режим рендеринга XOR (который, я надеюсь, не имеет такой же проблемы выше).

Ответы [ 2 ]

0 голосов
/ 12 декабря 2010

в качестве альтернативы, рассмотрите возможность копирования исходного изображения в буфер.чтобы отменить, просто скопируйте сохраненное изображение поверх измененного изображения.это не должно занимать больше памяти и позволяет избежать проблемы XOR.

0 голосов
/ 10 декабря 2010

Можно ли вообще попробовать XORing байтовых массивов растровых изображений перед рисованием?Это не обеспечит никакой специальной обработки для альфа, и теоретически может работать, если растровые изображения имеют одинаковый размер.Конечно, это может быть не быстро ...

Или, может быть, вы можете использовать один из перечисленных выше методов, но каким-то образом манипулировать альфа-значениями из байтовых массивов и обрабатывать их отдельно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...