I ont une certaine A bitmap qui je modifie pour produire B. bitmap Je veux produire efficacement un D bitmap par XOR les valeurs de pixels de A et B ensemble de telle sorte que D XOR A produit bitmap B et D XOR B produit bitmap R. Je veux stocker les différences entre les bitmaps afin que je puisse inverser les changements que j'ai faits.Comment XOR les valeurs de pixels de deux bitmaps ensemble?
Jusqu'à présent, j'ai essayé:
Dessin A sur B avec un objet de peinture que je l'ai appelé .setXfermode (nouveau PorterDuffXfermode (PorterDuff.Mode.XOR)) sur. Ceci fonctionne quand l'alpha de A et B est 255 partout mais n'importe quoi au-dessous produit des résultats indésirables. Si je XOR A sur A, par exemple, je m'attendrais à ce que le résultat soit une image vide. Avec ce mode xfer, la plus grande partie de A disparaîtra mais les parties sans alpha complet resteront.
Dessin A sur B avec un objet de dessin que j'ai appelé .setXfermode (nouveau PixelXorXfermode (0)). Ce mode xfer détruit les valeurs alpha, ce qui n'est pas ce que je veux. Je ne suis pas sûr non plus des choses utiles pour lesquelles je peux définir la valeur du constructeur.
Que puis-je faire? J'ai besoin de quelque chose qui traitera les valeurs de pixels comme des valeurs simples et ne traitera pas les valeurs alpha comme un cas particulier. J'ai besoin que ce soit assez rapide (comme le sont les types de peinture ci-dessus) et utiliser quelque chose comme setpixel/getpixel ou faire les calculs moi-même dans un byte [] sera beaucoup trop lent.
Edit: Quelqu'un peut-il aider? Même en sachant que la plupart des gens ne croient pas qu'il y a un appel API qui fera cela pour moi aidera. Je suis presque assez désespéré pour passer au rendu OpenGL car il a un mode de rendu XOR (qui, je l'espère, n'a pas le même problème ci-dessus).
XOR deux 400x800 bitmaps sur un Droid (sans JIT) prend environ 0,3s ce qui est beaucoup trop lent. Je vais probablement devoir faire cela en utilisant le NDK. – RichardNewton