Come recuperare il valore RGB per ciascun colore a parte l'array RGB intero monodimensionale

StackOverflow https://stackoverflow.com/questions/8399411

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);
  }
}
  }
}
È stato utile?

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à)

Come cambiare i colori di un disegnato in Android?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top