Ich verwende IntBuffer
Pixel einer Bitmap zu manipulieren, aber der Wert im Puffer sollte AABBGGRR, während die Farbkonstanten sind aarrggbb sein. Ich weiß, ich kann Color.argb
, Color.a
, ... zu invertieren, aber ich denke, es ist nicht perfekt.Schneller Algorithmus zum Invertieren eines ARGB-Farbwerts in ABGR?
Ich muss eine sehr große Anzahl von Pixeln manipulieren, also brauche ich einen Algorithmus, der diesen Operator in kurzer Zeit ausführen kann. Ich denke, dieses Bit-Ausdruck, aber es ist nicht korrekt:
0xFFFFFFFF^pSourceColor
Wenn niemand da ist besser, vielleicht werde ich Bit-Shift-Operatoren verwenden (das führt Color.a
, ...) statt, die Funktionen des Aufrufs der reduzieren Zeit.
EDIT:
Dies ist meine aktuelle Funktion zu konvertieren, obwohl ich es denke shoul einen besseren Algorithmus (weniger Betreiber) sein, es auszuführen:
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
}
möglich Duplikat von [Wie RGB BGR-Format konvertieren?] (Http://stackoverflow.com/questions/3041499/how-to-convert-rgb-to-bgr) –
Nein, nur das Thema Diskutiere über RGB. Und die guten Antworten verwenden Bit-Shift, um Rot, Grün und Blau zu erhalten. Mein Problem ist fortgeschrittener, da Alpha die Position nicht wechselt. –
1) Es gibt keine Möglichkeit, dies (in einer performanten Weise) zu lösen, ohne Bitshifting zu verwenden und 2) Der beste Weg, dies zu tun, ist in dieser Antwort. In Ihrem Fall speichern Sie einfach das Alpha, verschieben es und fügen es am Ende wieder hinzu. –