Algoritmo veloce per invertire un valore di colore ARGB su ABGR?

Sto utilizzando IntBuffer per manipolare i pixel di una Bitmap, ma il valore nel buffer dovrebbe essere AABBGGRR , mentre le costanti di colore sono AARRGGBB . So che posso usare Color.argb , Color.a , … per invertire, ma penso che non sia perfetto.

Ho bisogno di manipolare un numero molto elevato di pixel, quindi ho bisogno di un algorithm che possa eseguire questo operatore in tempi brevi. Penso a questa Bit Expression, ma non è corretto:

  • Android JNI RILEVATO ERRORE IN APPLICAZIONE: JNI GetMethodID chiamato con exception in sospeso
  • imansible annullare PendingIntents - Android
  • Android - Il layout apparentemente innocuo fa sì che l'applicazione si blocchi dopo un uso corto senza errori
  • Come calcolare la distanza tra due posizioni utilizzando il loro valore longitudine e latitudine
  • Come eseguire l'annullamento delle funzionalità nell'applicazione di pittura in Android?
  • Cambiare la password con Firebase per Android
  •  0xFFFFFFFF ^ pSourceColor 

    Se non c'è una cosa migliore, forse utilizzerò gli operatori bit-shift (che esegue Color.a , …) invece di call le funzioni per ridurre il tempo.

    EDIT:

    Questa è la mia function attuale per convertire, anche se penso che ci sia un algorithm migliore (less operatori) per eseguirlo:

     private int getBufferedColor(final int pSourceColor) { return ((pSourceColor >> 24) << 24) | // Alpha ((pSourceColor >> 16) & 0xFF) | // Red -> Blue ((pSourceColor >> 8) & 0xFF) << 8 | // Green ((pSourceColor) & 0xFF) << 16; // Blue -> Red } 

  • Algoritmo di Google Maps
  • Algoritmo per far scorrere verticalmente una bitmap in un arrays di byte
  • Come rilevare le pressioni lunghe del tasto del volume in un servizio?
  • Algoritmo Java che riempie le celle come un gioco "Android - Flow"
  • Modo giusto per formattare la data con stringhe come oggi, ieri, domani ecc
  • Inserimento di migliaia di pin sulla mappa di Google in app android
  • 2 Solutions collect form web for “Algoritmo veloce per invertire un valore di colore ARGB su ABGR?”

    Poiché A e G sono in atto, probabilmente fare un po 'meglio mascherando il B e R e poi aggiungendoli indietro. Non l'ho provato ma dovrebbe essere il 95% a destra:

     private static final int EXCEPT_R_MASK = 0xFF00FFFF; private static final int ONLY_R_MASK = ~EXCEPT_R_MASK; private static final int EXCEPT_B_MASK = 0xFFFFFF00; private static final int ONLY_B_MASK = ~EXCEPT_B_MASK; private int getBufferedColor(final int pSourceColor) { int r = (pSourceColor & ONLY_R_MASK) >> 16; int b = pSourceColor & ONLY_B_MASK; return (pSourceColor & EXCEPT_R_MASK & EXCEPT_B_MASK) | (b << 16) | r; } 

    A mio parere, la seguente function è abbastanza veloce per restituire il colore ABGR passando un colore ARGB e viceversa!

     int argbToABGR(int argbColor) { int r = (argbColor >> 16) & 0xFF; int b = argbColor & 0xFF; return (argbColor & 0xFF00FF00) | (b << 16) | r; } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.