bir bitmap piksellerini işlemek için IntBuffer
kullanıyorum, ancak renk sabitleri AARRGGBBise tampon içinde bir değer, AABBGGRR olmalıdır. Biliyorum, Color.argb
, Color.a
, ... 'yi ters çevirmek için kullanabilirim, ama bence bu mükemmel değil.Bir ARGB renk değerini ABGR'ye dönüştürmek için hızlı algoritma?
Çok sayıda piksel üzerinde işlem yapmam gerekiyor, bu nedenle bu operatörü kısa sürede gerçekleştirebilecek bir algoritmaya ihtiyacım var. Bu Bit İfade düşünüyorum, ama doğru değil: Bir daha iyi yoksa
0xFFFFFFFF^pSourceColor
, belki biraz kaydırmalı operatörleri (yani ... Color.a
gerçekleştirir) yerine azaltma işlevleri çağırmak kullanacak zaman.
DÜZENLEME:
Daha iyi bir algoritma (daha az operatörleri) bunu gerçekleştirmek için orada shoul düşünüyorum ama bu, dönüştürmek için benim şimdiki işlevdir: A ve G olduğundan
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
}
olası yinelenen [BGR için RGB dönüştürmek için nasıl?] (Http://stackoverflow.com/questions/3041499/how-to-convert-rgb-to-bgr) –
Hayır, bu konu sadece RGB hakkında tartışmak. Ve iyi cevaplar aslında kırmızı, yeşil, mavi almak için bit vardiyası kullanıyor. Alpha, pozisyon değiştirmediğinden benim problemim daha ilerlemiş. –
1) Bunu bitshifting kullanmadan (performansla) çözmenin bir yolu yoktur ve 2) Bunu yapmanın en iyi yolu bu cevaptır. Durumunuzda, sadece alfa kaydedin, kaydırın ve sonra sonuna kadar ekleyin. –