Come recuperare il valore RGB per ciascun colore a parte l'array RGB intero monodimensionale
Domanda
Non ho troppo familiarità con il cambio di bit, quindi ho la seguente domanda. Uso la funzione di seguito (trovata altrove) per decodificare da YUV a un array RGB.
Ora voglio regolare i valori rossi o verdi o blu per creare un effetto filtro personalizzato. Devo recuperare il valore R, il valore G e il valore B. Ogni valore compreso tra 0-255. Successivamente ho bisogno di ripristinarlo nell'array RGB all'indice specificato. Quindi ho bisogno di recuperare ogni colore da rgb[i]
e che essere in grado di archiviarlo di nuovo rgb[i]
void decodeYUV420SP(int[] rgb, byte[] yuv420sp, int width, int height) {
final int frameSize = width * height;
for (int j = 0, yp = 0; j < height; j++) {
int uvp = frameSize + (j >> 1) * width, u = 0, v = 0;
for (int i = 0; i < width; i++, yp++) {
int y = (0xff & ((int) yuv420sp[yp])) - 16;
if (y < 0)
y = 0;
if ((i & 1) == 0) {
v = (0xff & yuv420sp[uvp++]) - 128;
u = (0xff & yuv420sp[uvp++]) - 128;
}
int y1192 = 1192 * y;
int r = (y1192 + 1634 * v);
int g = (y1192 - 833 * v - 400 * u);
int b = (y1192 + 2066 * u);
if (r < 0)
r = 0;
else if (r > 262143)
r = 262143;
if (g < 0)
g = 0;
else if (g > 262143)
g = 262143;
if (b < 0)
b = 0;
else if (b > 262143)
b = 262143;
rgb[yp] = 0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff);
}
}
}
}
Soluzione
Per la tua comodità il Colore-Classe contiene molti metodi per ottenere e impostare parti specifiche di un numero intero a 32 bit, come ad esempio
Color.red(color)
Restituisce la parte rossa del colore INT.
O
Color.argb(alpha, red, green, blue)
Per creare un numero intero dai valori specificati (intervallo 0-255).
La documentazione per i diversi metodi specifica anche come implementare te stesso, se è quello che vuoi fare.
Altri suggerimenti
Fondamentalmente la trasformazione del colore è la moltiplicazione di Color Vector di Matrix e Android offre supporto. Aspetto:
http://developer.android.com/reference/android/graphics/colormatrix.html
Offre diversi metodi di convenienza per creare trasformazioni desiderate. (vedi campione all'estremità)