estoy usando IntBuffer
para manipular los píxeles de un mapa de bits, pero el valor en la memoria intermedia debería haber AABBGGRR, mientras que las constantes de color son aarrggbb. Sé que puedo usar Color.argb
, Color.a
, ... para invertir, pero creo que no es perfecto.Algoritmo rápido para invertir un valor de color ARGB en ABGR?
Necesito manipular una gran cantidad de píxeles, por lo que necesito un algoritmo que pueda realizar este operador en poco tiempo. Creo que de esta expresión de bits, pero no es correcta:
0xFFFFFFFF^pSourceColor
Si no hay uno mejor, tal vez voy a utilizar operadores de bits de desplazamiento (que realiza Color.a
, ...) en lugar de llamar a las funciones para reducir el hora.
EDIT:
Ésta es mi función actual para convertir, aunque creo que hay Shoul ser un mejor algoritmo (menos operadores) para llevarla a cabo:
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
}
posible duplicado de [Cómo convertir RGB a BGR?] (Http://stackoverflow.com/questions/3041499/how-to-convert-rgb-to-bgr) –
No, solamente ese tema discutir sobre RGB. Y las buenas respuestas están usando bit shift para obtener rojo, verde, azul. Mi problema es más avanzado, ya que Alpha no cambia de posición. –
1) No hay forma de resolver esto (de manera efectiva) sin usar el cambio de bits y 2) La mejor manera de hacerlo es en esa respuesta. En su caso, simplemente guarde el alfa, desplácelo y luego agréguelo al final. –