mi stosując IntBuffer
manipulować piksele mapy bitowej, przy czym wartość w buforze powinny być AABBGGRR, a stałe koloru są AARRGGBB. Wiem, że mogę użyć Color.argb
, Color.a
, ... odwrócić, ale myślę, że nie jest doskonały.Szybki algorytm odwracający wartość koloru ARGB na ABGR?
Potrzebuję manipulować bardzo dużą liczbą pikseli, więc potrzebuję algorytmu, który może wykonać ten operator w krótkim czasie. Myślę, że tego bitu wypowiedzi, ale to nie jest poprawne:
0xFFFFFFFF^pSourceColor
Jeśli nie ma lepszego, może będę używać operatorów bit-shift (który wykonuje Color.a
...) zamiast wywoływania funkcji w celu zmniejszenia czas.
EDIT:
To moja obecna funkcja konwersji, choć myślę, że shoul być lepszy algorytm (mniej operatorzy), aby wykonać go:
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
}
możliwe duplikat [Jak przekonwertować RGB na BGR?] (Http://stackoverflow.com/questions/3041499/how-to-convert-rgb-to-bgr) –
Nie, tylko, że wątek porozmawiaj o RGB. A dobre odpowiedzi w rzeczywistości używają przesunięcia bitowego, aby uzyskać czerwony, zielony, niebieski. Mój problem jest bardziej zaawansowany, ponieważ Alpha nie zmienia pozycji. –
1) Nie ma sposobu, aby rozwiązać to (w sposób efektywny) bez użycia bitshifting i 2) Najlepszym sposobem na to jest w tej odpowiedzi. W twoim przypadku po prostu zapisz alfabet, przestaw go, a następnie dodaj ponownie na końcu. –