¿Cómo se obtienen los valores RGB de un bitmap en un dispositivo Android?

Quiero obtener valores RGB de bitmap en Android, pero no puedo hacerlo hasta ahora. Mi objective es obtener valores RGB para cada píxel de bitmap. ¿Hay alguna función específica para Android o algo más? También me pregunto si necesito la función colorMatrix () Es muy importante para mi proyecto Gracias

Así es como estoy tratando de obtener ese valor. Utilice bitmap.getPixel () para obtener el bitmap correspondiente en la matriz de enteros. Al usar la operación de rotación bit a bit, obtendremos valores RGB.

  int[] pix = new int[picw * pich]; bitmap.getPixels(pix, 0, picw, 0, 0, picw, pich); int R, G, B,Y; for (int y = 0; y < pich; y++){ for (int x = 0; x < picw; x++) { int index = y * picw + x; int R = (pix[index] >> 16) & 0xff; //bitwise shifting int G = (pix[index] >> 8) & 0xff; int B = pix[index] & 0xff; //R,GB - Red, Green, Blue //to restre the values after RGB modification, use //next statement pix[index] = 0xff000000 | (R << 16) | (G << 8) | B; }} 

Bitmap.getPixel(x, y) devuelve un int con los valores de color y el valor alfa incrustado en él.

 int colour = bitmap.getPixel(x, y); int red = Color.red(colour); int blue = Color.blue(colour); int green = Color.green(colour); int alpha = Color.alpha(colour); 

Uno por statement menos: D

 imagen.getPixels(pix, 0, picw, 0, 0, picw, pich); for (i = 0; i < pix.length; i++) { r = (pix[i]) >> 16 & 0xff; g = (pix[i]) >> 8 & 0xff; b = (pix[i]) & 0xff; } 

Manejo de color de bitmap arbitrario

Aquí puede leer sobre los diversos métodos de color que extraerán los componentes de color de un píxel int.

Es posible que desee aplicar un filtro al bitmap y devolver una matriz de bytes. De lo contrario, puede reducir este ejemplo al for-loop y rodar por los píxeles generando su matriz de bytes.

 private byte[] rgbValuesFromBitmap(Bitmap bitmap) { ColorMatrix colorMatrix = new ColorMatrix(); ColorFilter colorFilter = new ColorMatrixColorFilter( colorMatrix); Bitmap argbBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(argbBitmap); Paint paint = new Paint(); paint.setColorFilter(colorFilter); canvas.drawBitmap(bitmap, 0, 0, paint); int width = bitmap.getWidth(); int height = bitmap.getHeight(); int componentsPerPixel = 3; int totalPixels = width * height; int totalBytes = totalPixels * componentsPerPixel; byte[] rgbValues = new byte[totalBytes]; @ColorInt int[] argbPixels = new int[totalPixels]; argbBitmap.getPixels(argbPixels, 0, width, 0, 0, width, height); for (int i = 0; i < totalPixels; i++) { @ColorInt int argbPixel = argbPixels[i]; int red = Color.red(argbPixel); int green = Color.green(argbPixel); int blue = Color.blue(argbPixel); rgbValues[i * componentsPerPixel + 0] = (byte) red; rgbValues[i * componentsPerPixel + 1] = (byte) green; rgbValues[i * componentsPerPixel + 2] = (byte) blue; } return rgbValues; }